diff --git a/crates/test_fixtures/abis/RaindexV6.json b/crates/test_fixtures/abis/RaindexV6.json index 4c7487fc84..9035fe6a31 100644 --- a/crates/test_fixtures/abis/RaindexV6.json +++ b/crates/test_fixtures/abis/RaindexV6.json @@ -2352,7 +2352,7 @@ } ], "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2e806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614929565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614991565b6102ba565b61010761013d3660046149fc565b5f9081526020819052604090205460011490565b61016461015f366004614a32565b6103c2565b005b610179610174366004614a97565b610521565b604051908152602001610113565b610107610195366004614ad5565b610535565b6101646101a8366004614a32565b610635565b6101796101bb366004614b6c565b6107c8565b6101d36101ce366004614b9d565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcf565b610fca565b61020e610209366004614c19565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c50565b6113cf565b6040516101139190614cbd565b610164610259366004614c50565b6114b5565b61017961026c366004614d1f565b61150f565b61016461027f366004615191565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9b565b6102d06020850185614b6c565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6c565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661524b565b611ab6565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153a1565b60405180910390a16103a4818585611ae5565b506103bb60015f80516020615f0e83398151915255565b9392505050565b6103ca611a9b565b3385856103d8838383611b1c565b6103e2865f611b4d565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b87565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c07565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615465565b611cf7565b5050505050505061051a60015f80516020615f0e83398151915255565b5050505050565b5f61052d848484611ec5565b949350505050565b5f61054a6001600160a01b038616878661204f565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615525565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615569565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615594565b6001600160a01b038a16929190612084565b5060019695505050505050565b61063d611a9b565b33858561064b838383611b1c565b5f8080806106598a82611b4d565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec5565b90506106a58b826120c0565b94506106b3338e8e886120dc565b90935091505f6106c4338f88612153565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615465565b50505050505050505061051a60015f80516020615f0e83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615569565b5f8061083a611a9b565b61084760808401846155a7565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4d565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b614851565b6108a361487d565b5f60405180606001604052808780608001906108bf91906155a7565b5f8181106108cf576108cf6155ed565b90506020028101906108e19190615601565b6108eb908061561f565b6108f9906040810190615633565b61090660808b018b6155a7565b5f818110610916576109166155ed565b90506020028101906109289190615601565b6020013581811061093b5761093b6155ed565b6109519260206040909202019081019150614b6c565b6001600160a01b0316815260200161096c60808901896155a7565b5f81811061097c5761097c6155ed565b905060200281019061098e9190615601565b610998908061561f565b6109a6906060810190615633565b6109b360808b018b6155a7565b5f8181106109c3576109c36155ed565b90506020028101906109d59190615601565b604001358181106109e8576109e86155ed565b6109fe9260206040909202019081019150614b6c565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a7565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a7565b905081108015610a6457506040840151610a64905f611b4d565b15610e7257610a7660808a018a6155a7565b82818110610a8657610a866155ed565b9050602002810190610a989190615601565b610aa190615679565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155ed565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155ed565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121bc565b5f610b6686611ab6565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d49565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222e565b90505f610c468c604001358360600151611b4d90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4d565b1580610cc357506060820151610cc1905f611b4d565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570f565b15610d6f576040808a015190850151610d41916120c0565b6060850151909250610d539083612733565b60408a0151909150610d659083612780565b60408a0152610dd6565b5f610d8b8560400151866060015161273390919063ffffffff16565b9050610da48a60400151826120c090919063ffffffff16565b9150610dbd8560600151836127b090919063ffffffff16565b60408b0151909350610dcf9083612780565b60408b0152505b610de08c826127e0565b9b50610dec8d836127e0565b9c50610df88285612810565b610e0281856128d1565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615837565b60405180910390a187516001018089526020028801849052610e5884612a7d565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570f565b610e8e5786610e90565b875b9050610e9d818a35612cc0565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612153565b505f9050610ee660a08a018a615921565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f615921565b6040518763ffffffff1660e01b8152600401610f3696959493929190615525565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b87565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155ed565b6020026020010151612cfa565b600101610f76565b505050505050610fc560015f80516020615f0e83398151915255565b915091565b5f610fd3611a9b565b5f61103061102b610fe48780615964565b610ff2906040810190615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0492505050565b612e75565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615633565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615633565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615964565b6110f690615978565b815260200187806020019061110b9190615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615983565b8152602001906001019061112a565b505050918352505060200161116e6040890189615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615983565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab6565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599d565b60405180910390a15f61124b60a08a018a615921565b905011156112e75761129c61126360a08a018a615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8f92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c615921565b6040516112de94939291906159c4565b60405180910390a15b6112f2828888611ae5565b93505050506103bb60015f80516020615f0e83398151915255565b5f80808061132761131e868061561f565b61032c9061524b565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561f565b6113649061524b565b866020013587604001356121bc565b5f6113b1611381878061561f565b61138a9061524b565b60208801356040890135336113a260608c018c6155a7565b6113ab916159f6565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d49565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155ed565b90506020028101906114619190615921565b8560405160200161147493929190615a15565b604051602081830303815290604052612eba565b83828151811061149a5761149a6155ed565b6020908102919091010152600101611431565b505092915050565b6114bd611a9b565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615465565b61150b60015f80516020615f0e83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615569565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a9b565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155ed565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155ed565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155ed565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155ed565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155ed565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155ed565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab6565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a85565b5f6117b286611ab6565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a85565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a38565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d49565b90505f6118ae8383612f5a565b90506118bd815f015184612810565b6118cb816020015183612810565b6118d98160400151846128d1565b6118e78160600151836128d1565b6118f083612cfa565b6118f982612cfa565b606081015181515f9161190c9190612780565b90505f61192a8360400151846020015161278090919063ffffffff16565b9050611936825f612cc0565b806119465750611946815f612cc0565b1561196457604051630d86822160e01b815260040160405180910390fd5b611998338b606001518a6020013581518110611982576119826155ed565b60200260200101515f01518a6080013585611c07565b50506119ce338a606001518a60600135815181106119b8576119b86155ed565b60200260200101515f01518a60a0013584611c07565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3783612a7d565b611a4082612a7d565b80516001600160e01b0316158015611a63575060208101516001600160e01b0316155b15611a81576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615f0e83398151915255565b611aa3612fa8565b60025f80516020615f0e83398151915255565b5f81604051602001611ac89190615ab4565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1790611b0d906104d6565b6104f88385615465565b505050565b80611b17576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7b84848484612fd9565b12979650505050505050565b5f805f611b93856130ad565b9050611b9f845f612cc0565b15611bbd57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc98684613113565b9150915080611bde57611bdb82615ac6565b91505b8115611bf957611bf96001600160a01b038816893085612084565b50925090505b935093915050565b5f80611c138382612cc0565b15611c345760405163793a8f5560e01b815260048101849052602401610316565b83611c5257611c44868685612153565b505f9250829150611cee9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c82866127e0565b9050611c98815f612cc0565b15611cb95760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611ebb57868181518110611d5e57611d5e6155ed565b602002602001015193505f845f015160400151511115611eb3575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd68d8a60200151613140565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e019190615b36565b5f60405180830381865afa158015611e1b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e429190810190615c2e565b9150505f81511115611eb15784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e83908a908590600401615ce4565b5f604051808303815f87803b158015611e9a575f80fd5b505af1158015611eac573d5f803e3d5ffd5b505050505b505b600101611d43565b5050505050505050565b5f8115611eff57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0984613422565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8191908716906370a0823190602401602060405180830381865afa158015611f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615569565b8361342e565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612000919088169063dd62ed3e90604401602060405180830381865afa158015611fd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffa9190615569565b8461342e565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120459061203f84846120c0565b906127e0565b93505050506103bb565b61205c838383600161346e565b611b1757604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120928484848460016134d0565b6120ba57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120cb8383612cc0565b6120d557816103bb565b5090919050565b5f806120e88382612cc0565b156121095760405163793a8f5560e01b815260048101849052602401610316565b8361211957611c44868685611b87565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c8286612780565b5f805f61215f856130ad565b905061216b845f612cc0565b1561218957604051632d1671a360e11b815260040160405180910390fd5b5f6121948583613113565b50905080156121b1576121b16001600160a01b038716888361204f565b969095509350505050565b826060015181815181106121d2576121d26155ed565b60200260200101515f01516001600160a01b0316836040015183815181106121fc576121fc6155ed565b60200260200101515f01516001600160a01b031603611b1757604051631cd2f1c760e21b815260040160405180910390fd5b6122366148e4565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122515790505090506122a66122748a611ab6565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122bb576122bb6155ed565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122fb576122fb6155ed565b60200260200101819052505f6123308a604001518a81518110612320576123206155ed565b60200260200101515f0151613422565b90505f6123828b5f01518c604001518c81518110612350576123506155ed565b60200260200101515f01518d604001518d81518110612371576123716155ed565b602002602001015160200151611ec5565b90506124118b604001518b8151811061239d5761239d6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cf576123cf6155ed565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612427576124276155ed565b602002602001018190525050505f61244e8a606001518981518110612320576123206155ed565b90505f61248f8b5f01518c606001518b8151811061246e5761246e6155ed565b60200260200101515f01518d606001518c81518110612371576123716155ed565b90506124dc8b606001518a815181106124aa576124aa6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cf576123cf6155ed565b836001600403815181106124f2576124f26155ed565b602002602001018190525050506125098186613140565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256987305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156125a1576125a1614d49565b6040519080825280602002602001820160405280156125ca578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125f09190615b36565b5f60405180830381865afa15801561260a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126319190810190615c2e565b9150915060028251101561265d578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126b19087906004908110612680576126806155ed565b602002602001015160038151811061269a5761269a6155ed565b6020026020010151826120c090919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e3576126e36155ed565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127638686868661353d565b915091505f612772838361365c565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136a9565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136d3565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276386868686613c10565b818160800151600481518110612828576128286155ed565b6020026020010151600481518110612842576128426155ed565b6020026020010181815250506120ba815f01515f0151826080015160048151811061286f5761286f6155ed565b60200260200101515f81518110612888576128886155ed565b60200260200101515f1c83608001516004815181106128a9576128a96155ed565b60200260200101516002815181106128c3576128c36155ed565b6020026020010151856120dc565b8181608001516003815181106128e9576128e96155ed565b6020026020010151600481518110612903576129036155ed565b6020908102919091010152805151608082015180515f9190600390811061292c5761292c6155ed565b60200260200101515f81518110612945576129456155ed565b60200260200101515f1c90505f8360800151600381518110612969576129696155ed565b6020026020010151600281518110612983576129836155ed565b602002602001015190505f801b8103612a2a576129a0855f612cc0565b156129c15760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f890866127e0565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a39565b612a3683838388611c07565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6e929190615cfc565b60405180910390a15050505050565b60c08101515115612af7578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac9929091600401615ce4565b5f604051808303815f87803b158015612ae0575f80fd5b505af1158015612af2573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4d8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8d57612b8d614d49565b604051908082528060200260200182016040528015612bb6578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be6578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c069190615b36565b5f60405180830381865afa158015612c20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c479190810190615c2e565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8f918590600401615ce4565b5f604051808303815f87803b158015612ca6575f80fd5b505af1158015612cb8573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cee84848484612fd9565b13979650505050505050565b5f8160800151600381518110612d1257612d126155ed565b6020026020010151600281518110612d2c57612d2c6155ed565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5d57612d5d6155ed565b60200260200101515f81518110612d7657612d766155ed565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dfb838383612153565b50505050505050565b6060604082511015612e2357505060408051602081019091525f815290565b5f60208301519050602060408451612e3b9190615a02565b612e459190615d31565b811115612e6157505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8557505f919050565b50602001515f1a90565b612e9881613d0e565b612eb75780604051630c89984b60e31b81526004016103169190615d50565b50565b60605f612ec78484613d3c565b9050808015612ee857505f3d1180612ee857505f846001600160a01b03163b115b15612efd57612ef5613d4f565b9150506102b4565b8015612f2757604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3a57612f35613d68565b612f53565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f878383613d73565b82526040820152612f988284613d73565b6020830152606082015292915050565b5f80516020615f0e83398151915254600203612fd757604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffe5786859250925050611cee565b505f85841315613012575092949193919260015b8386035f8112604c8213178015613045578215613037575f8994509450505050611cee565b885f94509450505050611cee565b600a82900a8981028a82828161305d5761305d615d1d565b0514613089578415613079575f8b965096505050505050611cee565b8a5f965096505050505050611cee565b841561309e578896509450611cee9350505050565b9550879450611cee9350505050565b5f805f6130b984613ddc565b909250905060018260038111156130d2576130d2615d62565b141580156130f157505f8260038111156130ee576130ee615d62565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d76565b5f806001600160e01b038416601b0b60e085901d613132828287613e69565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315d5761315d614d49565b604051908082528060200260200182016040528015613186578160200160208202803683370190505b5090505f80845111613198575f61319e565b83516001015b85516001010190505f8167ffffffffffffffff8111156131c0576131c0614d49565b6040519080825280602002602001820160405280156131f357816020015b60608152602001906001900390816131de5790505b5090505f613217604080516002815233602082015230818301526060810190915290565b828281518110613229576132296155ed565b60200260200101819052505f5b8751811015613286578180600101925050878181518110613259576132596155ed565b6020026020010151838381518110613273576132736155ed565b6020908102919091010152600101613236565b50855115613418578080600101915050838282815181106132a9576132a96155ed565b60200260200101819052505f5b8651811015613416576133658782815181106132d4576132d46155ed565b60200260200101515f01516133426133108a85815181106132f7576132f76155ed565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613354576133546155ed565b602002602001015160400151613fcf565b61338557604051630a57f30960e31b815260048101829052602401610316565b868181518110613397576133976155ed565b60200260200101515f01516001600160a01b03165f1b8582815181106133bf576133bf6155ed565b60200260200101818152505081806001019250508681815181106133e5576133e56155ed565b602002602001015160200151838381518110613403576134036155ed565b60209081029190910101526001016132b6565b505b5095945050505050565b5f805f6130b98461403f565b5f805f805f61343d878761409e565b9250925092505f8061344f85856140e1565b915091508183801561345e5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c45783831516156134b8573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352c578383151615613520573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613555575f92505f9150613652565b61355f8487615daf565b91505f61356b886141b9565b90505f613577876141b9565b90505f61358483836141e7565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135da57670de0b6b3a7640000820491506012015b633b9aca008211156135f357633b9aca00820491506009015b61271082111561360857612710820491506004015b811561361c57600a82049150600101613608565b6136268187615daf565b95506136488b8a613642878761363d87600a615eae565b614203565b896142cf565b9097509550505050505b5094509492505050565b5f805f61366985856140e1565b9150915080158015613679575081155b156136a157604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b5848461436f565b90945092506136c686868686613c10565b9150915094509492505050565b5f80835f036136ff57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361371057505f905080611cee565b5f805f8061371e8a8a6143c4565b919b509950915061372f88886143c4565b919950975090505f6137408b6141b9565b90505f61374c8a6141b9565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b115784156137a357507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae9565b6f4b3b4ca85a86c47a098a2240000000008310156138cf57678ac7230489e80000831015613833576402540be40083101561380157620186a08310156137f15750620186a090506005613aaa565b506402540be4009050600a613aaa565b655af3107a40008310156138205750655af3107a40009050600e613aaa565b50678ac7230489e8000090506013613aaa565b6b204fce5e3e250261100000008310156138855769152d02c7e14af680000083101561386e575069152d02c7e14af680000090506017613aaa565b506b204fce5e3e250261100000009050601c613aaa565b6d314dc6448d9338c15b0a000000008310156138b457506d314dc6448d9338c15b0a0000000090506021613aaa565b506f4b3b4ca85a86c47a098a22400000000090506026613aaa565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c75773af298d050e4395d69670b12b7f41000000000000831015613962577172cb5bd86321e38cb6ce6682e8000000000083101561394357507172cb5bd86321e38cb6ce6682e800000000009050602b613aaa565b5073af298d050e4395d69670b12b7f4100000000000090506030613aaa565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a3575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aaa565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aaa565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5d577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3557507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aaa565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aaa565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aaa57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abf57600a820491505f1901613aaa565b815f03613ae9576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b11576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2857808d039c50613b66565b600160ff1b9c90038c015f811315613b6657806001600160ff1b03038b13613b5357998a0199613b66565b5f80995099505050505050505050611cee565b5f808e128015613b7557505f8c135b15613b9657600160ff1b8e01808d13613b8e575f613b92565b808d035b9150505b8b818f01039750613bb38f8e613bad888789614203565b8b6142cf565b90995097505f811315613bfd57604c811315613bdd575f809a509a50505050505050505050611cee565b80600a0a8981613bef57613bef615d1d565b059850885f03613bfd575f97505b50969850949650611cee95505050505050565b5f8085158415178015613c3c57865f03613c305784849250925050611cee565b86869250925050611cee565b613c46878761461e565b9097509550613c55858561461e565b909550935085841315613c69579395929492935b838603604c811115613c82578787935093505050611cee565b80600a0a8681613c9457613c94615d1d565b0595505086850180881860ff90811c151589881890911c15168015613cfd57876001600160ff1b0303613ce45760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613d01565b8198505b5096979596505050505050565b5f600882511015613d2057505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d908460600151856040015161273390919063ffffffff16565b915083604001519050613db0836040015183611b4d90919063ffffffff16565b156131395782604001519150613dd38460600151836127b090919063ffffffff16565b90509250929050565b5f80613de6614667565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e609190615eb9565b91509150915091565b5f805f851215613e9657604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea857505f90506001611bff565b8460ff8416850185811215613eda5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2657604c19831215613efd575f809550955050505050611bff565b825f03600a0a9150818481613f1457613f14615d1d565b0495505084029091149150611bff9050565b5f831315613fbf57604d831315613f635760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7957613f79615d1d565b04841115613fad5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bff9050565b8360019550955050505050611bff565b5f836001600160a01b03163b5f0361402d575f80613fed85856146f2565b5090925090505f81600381111561400657614006615d62565b1480156140245750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614038848484614738565b90506103bb565b5f80614049614667565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3c573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140d057600a860460018201600a88065f14935093509350506140da565b8593509150600190505b9250925092565b5f601b83900b8314838382614145577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412557620186a0860595506005850194505b8586601b0b1461414057600a86059550846001019450614125565b61415b565b855f0361415b57505f9250600191506131399050565b848560030b1461419e575f85121561417b57505f92508291506131399050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141de57600160ff1b82036141d85750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61421086866141e7565b91509150815f036142345783818161422a5761422a615d1d565b04925050506103bb565b8382106142655760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561434b576001600160ff1b03841115614338576142fc6001600160ff1b036001615594565b84036143105750600160ff1b905081611cee565b61431b600a85615d31565b61432490615ef9565b61432f846001615daf565b91509150611cee565b61434184615ef9565b8391509150611cee565b6001600160ff1b0384111561436557614324600a85615d31565b5082905081611cee565b5f80600160ff1b84036143ba576001600160ff1b0383036143ad5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143dc57505f915081905060016140da565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c9576f4b3b4ca85a86c47a098a224000000000850515801561443e57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445f576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a757507f80000000000000000000000000000000000000000000000000000000000000138412155b156144c057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614522576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561457157507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458757606485029450600284039350614522565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b757506001600160ff1b018412155b156145c957600a850294506001840393505b600a808602908105861480156145e657506001600160ff1b018512155b156145f5578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462d87876143c4565b9250925092508061465b576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146be575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd7576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614729576020840151604085015160608601515f1a61471b88828585614789565b9550955095505050506140da565b505081515f91506002906140da565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c257505f91506003905082614847565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614813573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483e57505f925060019150829050614847565b92505f91508190505b9450945094915050565b604051806080016040528061486461487d565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148cb60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f761487d565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614939575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614960575f80fd5b50813567ffffffffffffffff811115614977575f80fd5b6020830191508360208260051b8501011115613139575f80fd5b5f805f604084860312156149a3575f80fd5b833567ffffffffffffffff808211156149ba575f80fd5b9085019060a082880312156149cd575f80fd5b909350602085013590808211156149e2575f80fd5b506149ef86828701614950565b9497909650939450505050565b5f60208284031215614a0c575f80fd5b5035919050565b6001600160a01b0381168114612eb7575f80fd5b80356141e281614a13565b5f805f805f60808688031215614a46575f80fd5b8535614a5181614a13565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a7a575f80fd5b614a8688828901614950565b969995985093965092949392505050565b5f805f60608486031215614aa9575f80fd5b8335614ab481614a13565b92506020840135614ac481614a13565b929592945050506040919091013590565b5f805f805f60808688031215614ae9575f80fd5b8535614af481614a13565b94506020860135614b0481614a13565b935060408601359250606086013567ffffffffffffffff80821115614b27575f80fd5b818801915088601f830112614b3a575f80fd5b813581811115614b48575f80fd5b896020828501011115614b59575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7c575f80fd5b81356103bb81614a13565b5f60c08284031215614b97575f80fd5b50919050565b5f60208284031215614bad575f80fd5b813567ffffffffffffffff811115614bc3575f80fd5b61052d84828501614b87565b5f805f60408486031215614be1575f80fd5b833567ffffffffffffffff80821115614bf8575f80fd5b614c0487838801614b87565b945060208601359150808211156149e2575f80fd5b5f60208284031215614c29575f80fd5b813567ffffffffffffffff811115614c3f575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c61575f80fd5b823567ffffffffffffffff811115614c77575f80fd5b614c8385828601614950565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1257603f19888603018452614d00858351614c8f565b94509285019290850190600101614ce4565b5092979650505050505050565b5f8060408385031215614d30575f80fd5b8235614d3b81614a13565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405160a0810167ffffffffffffffff81118282101715614d8057614d80614d49565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df557614df5614d49565b604052919050565b5f82601f830112614e0c575f80fd5b813567ffffffffffffffff811115614e2657614e26614d49565b614e39601f8201601f1916602001614dcc565b818152846020838601011115614e4d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e79575f80fd5b614e81614d5d565b90508135614e8e81614a13565b81526020820135614e9e81614a13565b6020820152604082013567ffffffffffffffff811115614ebc575f80fd5b614ec884828501614dfd565b60408301525092915050565b5f67ffffffffffffffff821115614eed57614eed614d49565b5060051b60200190565b5f60408284031215614f07575f80fd5b614f0f614d86565b90508135614f1c81614a13565b808252506020820135602082015292915050565b5f82601f830112614f3f575f80fd5b81356020614f54614f4f83614ed4565b614dcc565b8083825260208201915060208460061b870101935086841115614f75575f80fd5b602086015b84811015614f9a57614f8c8882614ef7565b835291830191604001614f7a565b509695505050505050565b5f60a08284031215614fb5575f80fd5b614fbd614da9565b9050614fc882614a27565b8152602082013567ffffffffffffffff80821115614fe4575f80fd5b614ff085838601614e69565b60208401526040840135915080821115615008575f80fd5b61501485838601614f30565b6040840152606084013591508082111561502c575f80fd5b5061503984828501614f30565b6060830152506080820135608082015292915050565b5f61505c614f4f84614ed4565b8381529050602080820190600585811b85018781111561507a575f80fd5b855b8181101561516757803567ffffffffffffffff8082111561509b575f80fd5b908801906060828c0312156150ae575f80fd5b6150b6614d5d565b82356150c181614a13565b815282870135828111156150d3575f80fd5b8301601f81018d136150e3575f80fd5b80356150f1614f4f82614ed4565b81815290881b8201890190898101908f83111561510c575f80fd5b928a01925b8284101561512a5783358252928a0192908a0190615111565b848b01525060409150508381013583811115615144575f80fd5b6151508e828701614dfd565b91830191909152508752505093830193830161507c565b50505050509392505050565b5f82601f830112615182575f80fd5b6103bb8383356020850161504f565b5f805f805f61014086880312156151a6575f80fd5b853567ffffffffffffffff808211156151bd575f80fd5b6151c989838a01614fa5565b965060208801359150808211156151de575f80fd5b6151ea89838a01614fa5565b95506151f98960408a01614b87565b945061010088013591508082111561520f575f80fd5b61521b89838a01615173565b9350610120880135915080821115615231575f80fd5b5061523e88828901615173565b9150509295509295909350565b5f6102b43683614fa5565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528a81614a13565b6001600160a01b0390811684526020830135906152a682614a13565b166020840152604082013536839003601e190181126152c3575f80fd5b820160208101903567ffffffffffffffff8111156152df575f80fd5b8036038213156152ed575f80fd5b60606040860152615302606086018284615256565b95945050505050565b5f808335601e19843603018112615320575f80fd5b830160208101925035905067ffffffffffffffff81111561533f575f80fd5b8060061b3603821315613139575f80fd5b8183525f60208085019450825f5b8581101561539657813561537181614a13565b6001600160a01b0316875281830135838801526040968701969091019060010161535e565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c781614a13565b166060830152602083013536849003605e190181126153e4575f80fd5b60a060808401526153fb610100840185830161527e565b905061540a604085018561530b565b605f19808685030160a0870152615422848385615350565b9350615431606088018861530b565b93509150808685030160c08701525061544b838383615350565b92505050608084013560e084015280915050949350505050565b5f615472614f4f84614ed4565b80848252602080830192508560051b85013681111561548f575f80fd5b855b8181101561551957803567ffffffffffffffff808211156154b0575f80fd5b8189019150604082360312156154c4575f80fd5b6154cc614d86565b8235828111156154da575f80fd5b6154e636828601614e69565b82525085830135828111156154f9575f80fd5b61550536828601615173565b828801525087525050938201938201615491565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555d60a083018486615256565b98975050505050505050565b5f60208284031215615579575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615580565b5f808335601e198436030181126155bc575f80fd5b83018035915067ffffffffffffffff8211156155d6575f80fd5b6020019150600581901b3603821315613139575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615615575f80fd5b9190910192915050565b5f8235609e19833603018112615615575f80fd5b5f808335601e19843603018112615648575f80fd5b83018035915067ffffffffffffffff821115615662575f80fd5b6020019150600681901b3603821315613139575f80fd5b5f60808236031215615689575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ad576156ad614d49565b8160405284359150808211156156c1575f80fd5b6156cd36838701614fa5565b8352602085013560208401526040850135604084015260608501359150808211156156f6575f80fd5b5061570336828601615173565b60608301525092915050565b5f6020828403121561571f575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539657815180516001600160a01b031688528301518388015260409096019590820190600101615741565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157be610100850182614c8f565b9050604083015184820360408601526157d7828261572e565b915050606083015184820360608601526157f1828261572e565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b838110156153965781518752958201959082019060010161581b565b5f6001600160a01b03808716835260206080818501528651608080860152615863610100860182615771565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158ff57601f1988830301845284518a815116835289810151878b8501526158d388850182615808565b91890151848303858b01529190506158eb8183614c8f565b968b0196958b0195935050506001016158a5565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615936575f80fd5b83018035915067ffffffffffffffff821115615950575f80fd5b602001915036819003821315613139575f80fd5b5f8235605e19833603018112615615575f80fd5b5f6102b43683614e69565b5f60408284031215615993575f80fd5b6103bb8383614ef7565b6001600160a01b0384168152826020820152606060408201525f6153026060830184615771565b6001600160a01b0385168152836020820152606060408201525f6159ec606083018486615256565b9695505050505050565b5f6103bb36848461504f565b818103818111156102b4576102b4615580565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a5a81840187615771565b90508281036040840152615a6e8186615771565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615771565b5f60018201615ad757615ad7615580565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2957601f19868403018952615b17838351615808565b98840198925090830190600101615afb565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6f610100840182614c8f565b9050606084015160808401526080840151601f19808584030160a0860152615b978383615ade565b925060a08601519150808584030160c0860152615bb48383615808565b925060c08601519150808584030160e0860152506153028282615808565b5f82601f830112615be1575f80fd5b81516020615bf1614f4f83614ed4565b8083825260208201915060208460051b870101935086841115615c12575f80fd5b602086015b84811015614f9a5780518352918301918301615c17565b5f8060408385031215615c3f575f80fd5b825167ffffffffffffffff80821115615c56575f80fd5b818501915085601f830112615c69575f80fd5b81516020615c79614f4f83614ed4565b82815260059290921b84018101918181019089841115615c97575f80fd5b948201945b83861015615cb557855182529482019490820190615c9c565b91880151919650909350505080821115615ccd575f80fd5b50615cda85828601615bd2565b9150509250929050565b828152604060208201525f61052d6040830184615808565b6001600160a01b0383168152604060208201525f61052d6040830184615ade565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4b57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8f565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da257634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad615580565b600181815b80851115615e0857815f1904821115615dee57615dee615580565b80851615615dfb57918102915b93841c9390800290615dd3565b509250929050565b5f82615e1e575060016102b4565b81615e2a57505f6102b4565b8160018114615e405760028114615e4a57615e66565b60019150506102b4565b60ff841115615e5b57615e5b615580565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e89575081810a6102b4565b615e938383615dce565b805f1904821115615ea657615ea6615580565b029392505050565b5f6103bb8383615e10565b5f8060408385031215615eca575f80fd5b825160048110615ed8575f80fd5b602084015190925060ff81168114615eee575f80fd5b809150509250929050565b5f600160ff1b82016141d8576141d861558056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", + "object": "0x6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2c806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00", "linkReferences": {} } } diff --git a/src/concrete/raindex/RaindexV6.sol b/src/concrete/raindex/RaindexV6.sol index 96dc961c2f..cdc4d04dda 100644 --- a/src/concrete/raindex/RaindexV6.sol +++ b/src/concrete/raindex/RaindexV6.sol @@ -725,6 +725,17 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex ClearStateChangeV2 memory clearStateChange = calculateClearStateChange(aliceOrderIOCalculation, bobOrderIOCalculation); + Float aliceBounty = clearStateChange.aliceOutput.sub(clearStateChange.bobInput); + Float bobBounty = clearStateChange.bobOutput.sub(clearStateChange.aliceInput); + + // A negative bounty means there is a spread between the orders. This is a + // critical error because it means the DEX could be exploited if allowed. + // Checked before any vault settlement so a spread always reverts with this + // explicit error. + if (aliceBounty.lt(LibDecimalFloat.FLOAT_ZERO) || bobBounty.lt(LibDecimalFloat.FLOAT_ZERO)) { + revert NegativeBounty(); + } + // Pull both orders' outputs into the orderbook before pushing either // order's input out. Alice's input token is Bob's output token and vice // versa, so both pulls must precede both pushes for the orderbook to hold @@ -737,16 +748,6 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex pushVaultZeroInput(bobOrderIOCalculation); { - Float aliceBounty = clearStateChange.aliceOutput.sub(clearStateChange.bobInput); - Float bobBounty = clearStateChange.bobOutput.sub(clearStateChange.aliceInput); - - // A negative bounty means there is a spread between the orders. - // This is a critical error because it means the DEX could be - // exploited if allowed. - if (aliceBounty.lt(LibDecimalFloat.FLOAT_ZERO) || bobBounty.lt(LibDecimalFloat.FLOAT_ZERO)) { - revert NegativeBounty(); - } - increaseVaultBalance( msg.sender, aliceOrder.validOutputs[clearConfig.aliceOutputIOIndex].token, diff --git a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol index 2633c76c88..834f3f3e69 100644 --- a/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/GenericPoolRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x04b0da6d34aaa9b7df623ea46c7849a9e13bcff32dbb02e781b94acaab02bacf); +bytes32 constant BYTECODE_HASH = bytes32(0x02b17ab238a36ebcedee19fa5a374d6122865be8fff61bf45ad15822c8482030); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x032dE54A767125d7F72f30694044E2a8416bF554); +address constant DEPLOYED_ADDRESS = address(0xE84c106B0A89A164d2D65205B9EBAE37c15Fd84a); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b038316731115ebc9c82f074454f6ac28f123b0684a453af7146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611363565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a36600461139e565b6100f3565b61003b61009d366004611440565b61013a565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101328683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103fc92505050565b505050505050565b6101426104ad565b61015161014e8261172f565b50565b61015e60808301836117eb565b90505f0361017f57604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b0383167337fc0efec37d19f8a221aa4f8f7600c9ba2acd20146101cc5760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6101da60808401846117eb565b5f8181106101ea576101ea611831565b90506020028101906101fc9190611845565b6102069080611863565b610214906040810190611877565b61022160808601866117eb565b5f81811061023157610231611831565b90506020028101906102439190611845565b6020013581811061025657610256611831565b61026c92602060409092020190810191506118bd565b90505f61027c60808501856117eb565b5f81811061028c5761028c611831565b905060200281019061029e9190611845565b6102a89080611863565b6102b6906060810190611877565b6102c360808701876117eb565b5f8181106102d3576102d3611831565b90506020028101906102e59190611845565b604001358181106102f8576102f8611831565b61030e92602060409092020190810191506118bd565b90506103256001600160a01b038316865f196104db565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610351908790600401611b21565b60408051808303815f875af115801561036c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103909190611d21565b506103a790506001600160a01b038316865f6104db565b6103cc6103b38461172f565b836103bd85610555565b846103c786610555565b6105d9565b50506103f760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b5f805f838060200190518101906104139190611d43565b919450925090506001600160a01b038316610441576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b0382166104685760405163456ac4c360e11b815260040160405180910390fd5b61047d6001600160a01b038616845f196104db565b6104916001600160a01b0383168247610878565b506104a66001600160a01b038616845f6104db565b5050505050565b6104b5610945565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6104e78383835f610989565b6103f7576104f883835f6001610989565b61052057604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b61052d8383836001610989565b6103f757604051635274afe760e01b81526001600160a01b03841660048201526024016101c3565b5f61055e6109eb565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af11580156105b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611dde565b6040805160018082528183019092525f91816020015b60608152602001906001900390816105ef575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611dfe565b905080156106ae576106ae6001600160a01b0388163383610a76565b5f6106b98288610a83565b50905080835f815181106106cf576106cf611831565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611dfe565b90508015610760576107606001600160a01b0386163383610a76565b5f61076b8286610a83565b509050808360018151811061078257610782611831565b60209081029190910101525047905080156107a1576107a13382610ac4565b5f6107ad826012610a83565b50905080836002815181106107c4576107c4611831565b602002602001018181525050505080825f815181106107e5576107e5611831565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161080657905050905087815f8151811061085957610859611831565b602002602001018190525061086e8382610b22565b5050505050505050565b6060814710156108a45760405163cf47918160e01b8152476004820152602481018390526044016101c3565b5f6108b0858486610ce6565b90508080156108d157505f3d11806108d157505f856001600160a01b03163b115b156108e6576108de610cfb565b91505061093e565b801561091057604051639996b31560e01b81526001600160a01b03861660048201526024016101c3565b3d156109235761091e610d14565b61093c565b60405163d6bda27560e01b815260040160405180910390fd5b505b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361098757604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610a42575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610987576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016101c3565b61052d8383836001610d1f565b5f805f805f610a928787610d69565b9250925092505f80610aa48585610dc5565b9150915081838015610ab35750815b9650965050505050505b9250929050565b80471015610aee5760405163cf47918160e01b8152476004820152602481018290526044016101c3565b610b07828260405180602001604052805f815250610ce6565b15610b10575050565b3d1561092357610b1e610d14565b5050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b865181101561086e57868181518110610b8957610b89611831565b602002602001015193505f845f015160400151511115610cde575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610c018d8a60200151610eb2565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610c2c9190611eca565b5f60405180830381865afa158015610c46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6d9190810190611fcb565b9150505f81511115610cdc5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610cae908a908590600401612081565b5f604051808303815f87803b158015610cc5575f80fd5b505af1158015610cd7573d5f803e3d5ffd5b505050505b505b600101610b6e565b5f805f83516020850186885af1949350505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166109df5783831516156109d3573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610db457600a860460018201600a88065f1493509350935050610dbe565b8593509150600190505b9250925092565b5f601b83900b8314838382610e29577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610e0957620186a0860595506005850194505b8586601b0b14610e2457600a86059550846001019450610e09565b610e3f565b855f03610e3f57505f925060019150610abd9050565b848560030b14610e82575f851215610e5f57505f9250829150610abd9050565b60405163d556b11160e01b815260048101839052602481018290526044016101c3565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b60605f825167ffffffffffffffff811115610ecf57610ecf6114be565b604051908082528060200260200182016040528015610ef8578160200160208202803683370190505b5090505f80845111610f0a575f610f10565b83516001015b85516001010190505f8167ffffffffffffffff811115610f3257610f326114be565b604051908082528060200260200182016040528015610f6557816020015b6060815260200190600190039081610f505790505b5090505f610f89604080516002815233602082015230818301526060810190915290565b828281518110610f9b57610f9b611831565b60200260200101819052505f5b8751811015610ff8578180600101925050878181518110610fcb57610fcb611831565b6020026020010151838381518110610fe557610fe5611831565b6020908102919091010152600101610fa8565b5085511561118a5780806001019150508382828151811061101b5761101b611831565b60200260200101819052505f5b8651811015611188576110d787828151811061104657611046611831565b60200260200101515f01516110b46110828a858151811061106957611069611831565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106110c6576110c6611831565b602002602001015160400151611194565b6110f757604051630a57f30960e31b8152600481018290526024016101c3565b86818151811061110957611109611831565b60200260200101515f01516001600160a01b03165f1b85828151811061113157611131611831565b602002602001018181525050818060010192505086818151811061115757611157611831565b60200260200101516020015183838151811061117557611175611831565b6020908102919091010152600101611028565b505b5095945050505050565b5f836001600160a01b03163b5f036111f2575f806111b28585611204565b5090925090505f8160038111156111cb576111cb6120a1565b1480156111e95750856001600160a01b0316826001600160a01b0316145b9250505061093e565b6111fd84848461124a565b905061093e565b5f805f835160410361123b576020840151604085015160608601515f1a61122d8882858561129b565b955095509550505050610dbe565b505081515f9150600290610dbe565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112d457505f91506003905082611359565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611325573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661135057505f925060019150829050611359565b92505f91508190505b9450945094915050565b5f60208284031215611373575f80fd5b81356001600160e01b03198116811461093e575f80fd5b6001600160a01b038116811461014e575f80fd5b5f805f805f8060a087890312156113b3575f80fd5b86356113be8161138a565b955060208701356113ce8161138a565b94506040870135935060608701359250608087013567ffffffffffffffff808211156113f8575f80fd5b818901915089601f83011261140b575f80fd5b813581811115611419575f80fd5b8a602082850101111561142a575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611452575f80fd5b833561145d8161138a565b9250602084013567ffffffffffffffff80821115611479575f80fd5b9085019060c0828803121561148c575f80fd5b909250604085013590808211156114a1575f80fd5b508401604081870312156114b3575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156114f5576114f56114be565b60405290565b6040805190810167ffffffffffffffff811182821017156114f5576114f56114be565b604051601f8201601f1916810167ffffffffffffffff81118282101715611547576115476114be565b604052919050565b5f67ffffffffffffffff821115611568576115686114be565b50601f01601f191660200190565b5f82601f830112611585575f80fd5b81356115986115938261154f565b61151e565b8181528460208386010111156115ac575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156115e1576115e16114be565b5060051b60200190565b5f82601f8301126115fa575f80fd5b8135602061160a611593836115c8565b82815260059290921b84018101918181019086841115611628575f80fd5b8286015b8481101561172457803567ffffffffffffffff8082111561164b575f80fd5b908801906060828b03601f19011215611662575f80fd5b61166a6114d2565b868301356116778161138a565b81526040838101358381111561168b575f80fd5b8401603f81018d1361169b575f80fd5b888101356116ab611593826115c8565b81815260059190911b82018301908a8101908f8311156116c9575f80fd5b928401925b828410156116e75783358252928b0192908b01906116ce565b858c01525050506060840135838111156116ff575f80fd5b61170d8d8a83880101611576565b91830191909152508552505091830191830161162c565b509695505050505050565b5f6040823603121561173f575f80fd5b6117476114fb565b823567ffffffffffffffff8082111561175e575f80fd5b818501915060608236031215611772575f80fd5b61177a6114d2565b82356117858161138a565b815260208301356117958161138a565b60208201526040830135828111156117ab575f80fd5b6117b736828601611576565b604083015250835260208501359150808211156117d2575f80fd5b506117df368286016115eb565b60208301525092915050565b5f808335601e19843603018112611800575f80fd5b83018035915067ffffffffffffffff82111561181a575f80fd5b6020019150600581901b3603821315610abd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611859575f80fd5b9190910192915050565b5f8235609e19833603018112611859575f80fd5b5f808335601e1984360301811261188c575f80fd5b83018035915067ffffffffffffffff8211156118a6575f80fd5b6020019150600681901b3603821315610abd575f80fd5b5f602082840312156118cd575f80fd5b813561093e8161138a565b5f808335601e198436030181126118ed575f80fd5b830160208101925035905067ffffffffffffffff81111561190c575f80fd5b8060051b3603821315610abd575f80fd5b5f8235605e19833603018112611931575f80fd5b90910192915050565b5f808335601e1984360301811261194f575f80fd5b830160208101925035905067ffffffffffffffff81111561196e575f80fd5b803603821315610abd575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e198436030181126119b9575f80fd5b830160208101925035905067ffffffffffffffff8111156119d8575f80fd5b8060061b3603821315610abd575f80fd5b8183525f60208085019450825f5b85811015611a2f578135611a0a8161138a565b6001600160a01b031687528183013583880152604096870196909101906001016119f7565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611b1357858303601f19018a52611a6c828961191d565b60608135611a798161138a565b6001600160a01b03168552611a90828801836118d8565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611aca575f80fd5b871b808288850137860190506040611ae48482018561193a565b9450838884030182890152611afc848401868361197c565b9e8a019e9750505093870193505050600101611a51565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611b57575f80fd5b8060808901525050611b6c60808801886118d8565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ce8578b830360ff19018452813536879003607e19018112611baf575f80fd5b8601803536829003609e19018112611bc5575f80fd5b6080855281018035611bd68161138a565b6001600160a01b038082166080880152611bf28e84018461191d565b915060a0808801528135611c058161138a565b8116610120880152818e0135611c1a8161138a565b16610140870152611c2d818c018261193a565b91508a610160880152611c456101808801838361197c565b915050611c548b8301836119a4565b607f19808985030160c08a0152611c6c8483856119e9565b9350611c7a8d8601866119a4565b93509150808985030160e08a015250611c948383836119e9565b9250505060808201358c8701528c8301358d8701528a8301358b870152611cbd8a8401846118d8565b935091508581038a870152611cd3818484611a3a565b968d019695505050918a019150600101611b8a565b5050611cf760a08c018c61193a565b8b8303601f190160c08d015298509650611d1281898961197c565b9b9a5050505050505050505050565b5f8060408385031215611d32575f80fd5b505080516020909101519092909150565b5f805f60608486031215611d55575f80fd5b8351611d608161138a565b6020850151909350611d718161138a565b604085015190925067ffffffffffffffff811115611d8d575f80fd5b8401601f81018613611d9d575f80fd5b8051611dab6115938261154f565b818152876020838501011115611dbf575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f60208284031215611dee575f80fd5b815160ff8116811461093e575f80fd5b5f60208284031215611e0e575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611a2f57815187529582019590820190600101611e56565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ebd57601f19868403018952611eab838351611e43565b98840198925090830190600101611e8f565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152611f03610100840182611e15565b9050606084015160808401526080840151601f19808584030160a0860152611f2b8383611e72565b925060a08601519150808584030160c0860152611f488383611e43565b925060c08601519150808584030160e086015250611f668282611e43565b95945050505050565b5f82601f830112611f7e575f80fd5b81516020611f8e611593836115c8565b8083825260208201915060208460051b870101935086841115611faf575f80fd5b602086015b848110156117245780518352918301918301611fb4565b5f8060408385031215611fdc575f80fd5b825167ffffffffffffffff80821115611ff3575f80fd5b818501915085601f830112612006575f80fd5b81516020612016611593836115c8565b82815260059290921b84018101918181019089841115612034575f80fd5b948201945b8386101561205257855182529482019490820190612039565b9188015191965090935050508082111561206a575f80fd5b5061207785828601611f6f565b9150509250929050565b828152604060208201525f6120996040830184611e43565b949350505050565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol index 3df966dc00..87e987a473 100644 --- a/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol +++ b/src/generated/GenericPoolRaindexV6FlashBorrower.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x09617589f55317f6e41e1a1fba10d0d77996af310e5ce4d2705249fcaf3cb029); +bytes32 constant BYTECODE_HASH = bytes32(0x03cde49152f7b5e29826ea8c561481b747b86be1f5cb4136fa064be6e4ac1c0d); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x83ae30FA284da3541904dA0D58772E1d2CDAE5ea); +address constant DEPLOYED_ADDRESS = address(0x032d9D94A79909F3b337ECFE6f73f4e86bA79c7E); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f33731115ebc9c82f074454f6ac28f123b0684a453af71461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d57806323e30c8b146100715780638c18e4ba1461009e57005b3661003b57005b005b348015610048575f80fd5b5061005c6100573660046116eb565b6100b1565b60405190151581526020015b60405180910390f35b34801561007c575f80fd5b5061009061008b366004611774565b6100e7565b604051908152602001610068565b61003b6100ac3660046117eb565b610204565b5f6001600160e01b031982166323e30c8b60e01b14806100e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f337337fc0efec37d19f8a221aa4f8f7600c9ba2acd201461012257604051625e1e6f60e51b81523360048201526024015b60405180910390fd5b6001600160a01b0387163014610156576040516322c7df1960e21b81526001600160a01b0388166004820152602401610119565b5f8061016484860186611def565b915091506101728282610534565b6040516334e3942b60e11b815233906369c7285690610195908590600401612008565b60408051808303815f875af11580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190612186565b507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd99a9950505050505050505050565b61020c6105a8565b61021b610218826121a8565b50565b6102286080850185612211565b90505f0361024957604051639c95219f60e01b815260040160405180910390fd5b6102596080850160608601612257565b61027657604051636d3a9fe560e01b815260040160405180910390fd5b5f84848460405160200161028c939291906124b0565b60408051601f1981840301815291905290505f6102ac6080870187612211565b5f8181106102bc576102bc6126c2565b90506020028101906102ce91906126d6565b6102d890806126f4565b6102e6906060810190612708565b6102f36080890189612211565b5f818110610303576103036126c2565b905060200281019061031591906126d6565b60400135818110610328576103286126c2565b61033e926020604090920201908101915061274e565b90505f61034e6080880188612211565b5f81811061035e5761035e6126c2565b905060200281019061037091906126d6565b61037a90806126f4565b610388906040810190612708565b61039560808a018a612211565b5f8181106103a5576103a56126c2565b90506020028101906103b791906126d6565b602001358181106103ca576103ca6126c2565b6103e0926020604090920201908101915061274e565b90505f6103ec826105d6565b90505f6103f8846105d6565b90505f6104068a358361065a565b905061041d6001600160a01b0385168c5f19610696565b6104326001600160a01b0386168c5f19610696565b604051632e7ff4ef60e11b81526001600160a01b038c1690635cffe9de90610464903090899086908c90600401612769565b6020604051808303815f875af1158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a4919061279a565b6104c1576040516349088f5960e11b815260040160405180910390fd5b6104d56001600160a01b0386168c5f610696565b6104e96001600160a01b0385168c5f610696565b6104fe6104f5886121a8565b85858886610710565b50505050505061052d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b5f82608001515f8151811061054b5761054b6126c2565b60200260200101515f01516060015183608001515f81518110610570576105706126c2565b6020026020010151604001518151811061058c5761058c6126c2565b60200260200101515f015190506105a381836109af565b505050565b6105b0610a59565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6105df610a9d565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015610636573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e191906127b5565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316601b0b60e084901d61068d828286610b28565b95945050505050565b6106a28383835f610b6c565b6105a3576106b383835f6001610b6c565b6106db57604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6106e88383836001610b6c565b6105a357604051635274afe760e01b81526001600160a01b0384166004820152602401610119565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610726575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156107a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906127d5565b905080156107e5576107e56001600160a01b0388163383610bce565b5f6107f08288610bdb565b50905080835f81518110610806576108066126c2565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b91906127d5565b90508015610897576108976001600160a01b0386163383610bce565b5f6108a28286610bdb565b50905080836001815181106108b9576108b96126c2565b60209081029190910101525047905080156108d8576108d83382610c1c565b5f6108e4826012610bdb565b50905080836002815181106108fb576108fb6126c2565b602002602001018181525050505080825f8151811061091c5761091c6126c2565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161093d57905050905087815f81518110610990576109906126c2565b60200260200101819052506109a58382610c93565b5050505050505050565b5f805f838060200190518101906109c691906127ec565b919450925090506001600160a01b0383166109f4576040516398521dc560e01b815260040160405180910390fd5b6001600160a01b038216610a1b5760405163456ac4c360e11b815260040160405180910390fd5b610a306001600160a01b038616845f19610696565b610a446001600160a01b0383168247610e57565b5061052d6001600160a01b038616845f610696565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203610a9b57604051633ee5aeb560e01b815260040160405180910390fd5b565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610af4575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15610a9b576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610119565b5f805f610b36868686610f05565b9150915080610b615760405162bc8ecf60e31b81526004810187905260248101869052604401610119565b5090505b9392505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6106e8838383600161106e565b5f805f805f610bea87876110b8565b9250925092505f80610bfc8585611114565b9150915081838015610c0b5750815b9650965050505050505b9250929050565b80471015610c465760405163cf47918160e01b815247600482015260248101829052604401610119565b610c5f828260405180602001604052805f815250611201565b15610c68575050565b3d15610c7a57610c76611216565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156109a557868181518110610cfa57610cfa6126c2565b602002602001015193505f845f015160400151511115610e4f575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d728d8a60200151611221565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d9d91906128d2565b5f60405180830381865afa158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde91908101906129ca565b9150505f81511115610e4d5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610e1f908a908590600401612a76565b5f604051808303815f87803b158015610e36575f80fd5b505af1158015610e48573d5f803e3d5ffd5b505050505b505b600101610cdf565b606081471015610e835760405163cf47918160e01b815247600482015260248101839052604401610119565b5f610e8f858486611201565b9050808015610eb057505f3d1180610eb057505f856001600160a01b03163b115b15610ec557610ebd611503565b915050610b65565b8015610eef57604051639996b31560e01b81526001600160a01b0386166004820152602401610119565b3d15610c7a57610efd611216565b509392505050565b5f805f851215610f3257604051634a7d166b60e01b81526004810186905260248101859052604401610119565b845f03610f4457505f90506001611066565b8460ff8416850185811215610f765760405163d556b11160e01b81526004810188905260248101879052604401610119565b5f805f831215610fc257604c19831215610f99575f809550955050505050611066565b825f03600a0a9150818481610fb057610fb0612a96565b04955050840290911491506110669050565b5f83131561105b57604d831315610fff5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b82600a0a9150815f198161101557611015612a96565b048411156110495760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610119565b50919091029250600191506110669050565b509193506001925050505b935093915050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610bc2578383151615610bb6573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561110357600a860460018201600a88065f149350935093505061110d565b8593509150600190505b9250925092565b5f601b83900b8314838382611178577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561115857620186a0860595506005850194505b8586601b0b1461117357600a86059550846001019450611158565b61118e565b855f0361118e57505f925060019150610c159050565b848560030b146111d1575f8512156111ae57505f9250829150610c159050565b60405163d556b11160e01b81526004810183905260248101829052604401610119565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff81111561123e5761123e611892565b604051908082528060200260200182016040528015611267578160200160208202803683370190505b5090505f80845111611279575f61127f565b83516001015b85516001010190505f8167ffffffffffffffff8111156112a1576112a1611892565b6040519080825280602002602001820160405280156112d457816020015b60608152602001906001900390816112bf5790505b5090505f6112f8604080516002815233602082015230818301526060810190915290565b82828151811061130a5761130a6126c2565b60200260200101819052505f5b875181101561136757818060010192505087818151811061133a5761133a6126c2565b6020026020010151838381518110611354576113546126c2565b6020908102919091010152600101611317565b508551156114f95780806001019150508382828151811061138a5761138a6126c2565b60200260200101819052505f5b86518110156114f7576114468782815181106113b5576113b56126c2565b60200260200101515f01516114236113f18a85815181106113d8576113d86126c2565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110611435576114356126c2565b60200260200101516040015161151c565b61146657604051630a57f30960e31b815260048101829052602401610119565b868181518110611478576114786126c2565b60200260200101515f01516001600160a01b03165f1b8582815181106114a0576114a06126c2565b60200260200101818152505081806001019250508681815181106114c6576114c66126c2565b6020026020010151602001518383815181106114e4576114e46126c2565b6020908102919091010152600101611397565b505b5095945050505050565b6040513d81523d5f602083013e3d602001810160405290565b5f836001600160a01b03163b5f0361157a575f8061153a858561158c565b5090925090505f81600381111561155357611553612aaa565b1480156115715750856001600160a01b0316826001600160a01b0316145b92505050610b65565b6115858484846115d2565b9050610b65565b5f805f83516041036115c3576020840151604085015160608601515f1a6115b588828585611623565b95509550955050505061110d565b505081515f915060029061110d565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561165c57505f915060039050826116e1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156116ad573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166116d857505f9250600191508290506116e1565b92505f91508190505b9450945094915050565b5f602082840312156116fb575f80fd5b81356001600160e01b031981168114610b65575f80fd5b6001600160a01b0381168114610218575f80fd5b803561173181611712565b919050565b5f8083601f840112611746575f80fd5b50813567ffffffffffffffff81111561175d575f80fd5b602083019150836020828501011115610c15575f80fd5b5f805f805f8060a08789031215611789575f80fd5b863561179481611712565b955060208701356117a481611712565b94506040870135935060608701359250608087013567ffffffffffffffff8111156117cd575f80fd5b6117d989828a01611736565b979a9699509497509295939492505050565b5f805f805f608086880312156117ff575f80fd5b853561180a81611712565b9450602086013567ffffffffffffffff80821115611826575f80fd5b9087019060c0828a031215611839575f80fd5b9094506040870135908082111561184e575f80fd5b61185a89838a01611736565b90955093506060880135915080821115611872575f80fd5b50860160408189031215611884575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156118c9576118c9611892565b60405290565b6040805190810167ffffffffffffffff811182821017156118c9576118c9611892565b6040516080810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160a0810167ffffffffffffffff811182821017156118c9576118c9611892565b60405160c0810167ffffffffffffffff811182821017156118c9576118c9611892565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198457611984611892565b604052919050565b8015158114610218575f80fd5b80356117318161198c565b5f67ffffffffffffffff8211156119bd576119bd611892565b5060051b60200190565b5f67ffffffffffffffff8211156119e0576119e0611892565b50601f01601f191660200190565b5f82601f8301126119fd575f80fd5b8135611a10611a0b826119c7565b61195b565b818152846020838601011115611a24575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215611a50575f80fd5b611a586118a6565b90508135611a6581611712565b81526020820135611a7581611712565b6020820152604082013567ffffffffffffffff811115611a93575f80fd5b611a9f848285016119ee565b60408301525092915050565b5f82601f830112611aba575f80fd5b81356020611aca611a0b836119a4565b82815260069290921b84018101918181019086841115611ae8575f80fd5b8286015b84811015611b2e5760408189031215611b03575f80fd5b611b0b6118cf565b8135611b1681611712565b81528185013585820152835291830191604001611aec565b509695505050505050565b5f82601f830112611b48575f80fd5b81356020611b58611a0b836119a4565b82815260059290921b84018101918181019086841115611b76575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611b99575f80fd5b908801906060828b03601f19011215611bb0575f80fd5b611bb86118a6565b86830135611bc581611712565b815260408381013583811115611bd9575f80fd5b8401603f81018d13611be9575f80fd5b88810135611bf9611a0b826119a4565b81815260059190911b82018301908a8101908f831115611c17575f80fd5b928401925b82841015611c355783358252928b0192908b0190611c1c565b858c0152505050606084013583811115611c4d575f80fd5b611c5b8d8a838801016119ee565b918301919091525085525050918301918301611b7a565b5f82601f830112611c81575f80fd5b81356020611c91611a0b836119a4565b82815260059290921b84018101918181019086841115611caf575f80fd5b8286015b84811015611b2e57803567ffffffffffffffff80821115611cd2575f80fd5b90880190601f196080838c0382011215611cea575f80fd5b611cf26118f2565b8784013583811115611d02575f80fd5b840160a0818e0384011215611d15575f80fd5b611d1d611915565b9250611d2a898201611726565b8352604081013584811115611d3d575f80fd5b611d4b8e8b83850101611a40565b8a8501525060608082013585811115611d62575f80fd5b611d708f8c83860101611aab565b604086015250608082013585811115611d87575f80fd5b611d958f8c83860101611aab565b828601525060a0820135608085015283835260408601358a8401528086013560408401526080860135935084841115611dcc575f80fd5b611dda8e8b86890101611b39565b90830152508652505050918301918301611cb3565b5f8060408385031215611e00575f80fd5b823567ffffffffffffffff80821115611e17575f80fd5b9084019060c08287031215611e2a575f80fd5b611e32611938565b823581526020830135602082015260408301356040820152611e5660608401611999565b6060820152608083013582811115611e6c575f80fd5b611e7888828601611c72565b60808301525060a083013582811115611e8f575f80fd5b611e9b888286016119ee565b60a08301525093506020850135915080821115611eb6575f80fd5b50611ec3858286016119ee565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815180845260208085019450602084015f5b83811015611f3e57815180516001600160a01b031688528301518388015260409096019590820190600101611f0e565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611f3e57815187529582019590820190600101611f5c565b5f82825180855260208086019550808260051b8401018186015f5b84811015611ffb57601f19868403018952815160606001600160a01b038251168552858201518187870152611fca82870182611f49565b91505060408083015192508582038187015250611fe78183611ecd565b9a86019a9450505090830190600101611f93565b5090979650505050505050565b5f602080835260e08301845182850152818501516040818187015280870151915060608281880152808801519250608083151560808901526080890151935060a060c060a08a01528585518088526101009750878b019150878160051b8c010189880197505f5b82811015612157578c820360ff190184528851805187845280516001600160a01b03908116898601528d82015188860189905280518216610120870152808f01519091166101408601528a015161016085018a90526120d2610180860182611ecd565b90508a820151607f19808784030160c08801526120ef8383611efb565b92508b8401519150808784030160e08801525061210c8282611efb565b915050888201518d8601528d8301518e8601528a8301518b8601528983015192508481038a86015261213e8184611f78565b9b8e019b968e019694505050600191909101905061206f565b5060a08d01518c8203601f190160c08e01529950612175818b611ecd565b9d9c50505050505050505050505050565b5f8060408385031215612197575f80fd5b505080516020909101519092909150565b5f604082360312156121b8575f80fd5b6121c06118cf565b823567ffffffffffffffff808211156121d7575f80fd5b6121e336838701611a40565b835260208501359150808211156121f8575f80fd5b5061220536828601611b39565b60208301525092915050565b5f808335601e19843603018112612226575f80fd5b83018035915067ffffffffffffffff821115612240575f80fd5b6020019150600581901b3603821315610c15575f80fd5b5f60208284031215612267575f80fd5b8135610b658161198c565b5f808335601e19843603018112612287575f80fd5b830160208101925035905067ffffffffffffffff8111156122a6575f80fd5b8060051b3603821315610c15575f80fd5b5f8235605e198336030181126122cb575f80fd5b90910192915050565b5f808335601e198436030181126122e9575f80fd5b830160208101925035905067ffffffffffffffff811115612308575f80fd5b803603821315610c15575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612353575f80fd5b830160208101925035905067ffffffffffffffff811115612372575f80fd5b8060061b3603821315610c15575f80fd5b8183525f60208085019450825f5b85811015611f3e5781356123a481611712565b6001600160a01b03168752818301358388015260409687019690910190600101612391565b8183526020808401935f91600585811b8301820185855b888110156124a257858303601f19018a526123fb82896122b7565b6060813561240881611712565b6001600160a01b0316855261241f82880183612272565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612459575f80fd5b871b808288850137860190506040612473848201856122d4565b945083888403018289015261248b8484018683612316565b9e8a019e97505050938701935050506001016123e0565b509098975050505050505050565b5f604080835261010080840187358386015260206060818a013581880152848a01356080880152808a01356124e48161198c565b151560a08801526124f860808b018b612272565b60c0898101529384905261012093848901600582901b8a018601835f5b84811015612672578c830361011f19018452813536879003607e1901811261253b575f80fd5b8601803536829003609e19018112612551575f80fd5b608085528101803561256281611712565b6001600160a01b03808216608088015261257e8c8401846122b7565b915060a080880152813561259181611712565b8116878e0152818c01356125a481611712565b166101408701526125b7818f01826122d4565b91508a6101608801526125cf61018088018383612316565b9150506125de8e83018361233e565b607f19808985030160c08a01526125f6848385612383565b93506126048d86018661233e565b93509150808985030160e08a01525061261e838383612383565b9250505060808201358d8701528a8301358b8701528d8301358e8701526126478a840184612272565b935091508581038a87015261265d8184846123c9565b968b0196955050509188019150600101612515565b505061268160a08f018f6122d4565b8c8303603f190160e08e01529950975061269c818a8a612316565b98505050505050858403818701525050506126b8818587612316565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e198336030181126126ea575f80fd5b9190910192915050565b5f8235609e198336030181126126ea575f80fd5b5f808335601e1984360301811261271d575f80fd5b83018035915067ffffffffffffffff821115612737575f80fd5b6020019150600681901b3603821315610c15575f80fd5b5f6020828403121561275e575f80fd5b8135610b6581611712565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526126b86080830184611ecd565b5f602082840312156127aa575f80fd5b8151610b658161198c565b5f602082840312156127c5575f80fd5b815160ff81168114610b65575f80fd5b5f602082840312156127e5575f80fd5b5051919050565b5f805f606084860312156127fe575f80fd5b835161280981611712565b602085015190935061281a81611712565b604085015190925067ffffffffffffffff811115612836575f80fd5b8401601f81018613612846575f80fd5b8051612854611a0b826119c7565b818152876020838501011115612868575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611ffb57601f198684030189526128c0838351611f49565b988401989250908301906001016128a4565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261290b610100840182611ecd565b9050606084015160808401526080840151601f19808584030160a08601526129338383612887565b925060a08601519150808584030160c08601526129508383611f49565b925060c08601519150808584030160e08601525061068d8282611f49565b5f82601f83011261297d575f80fd5b8151602061298d611a0b836119a4565b8083825260208201915060208460051b8701019350868411156129ae575f80fd5b602086015b84811015611b2e57805183529183019183016129b3565b5f80604083850312156129db575f80fd5b825167ffffffffffffffff808211156129f2575f80fd5b818501915085601f830112612a05575f80fd5b81516020612a15611a0b836119a4565b82815260059290921b84018101918181019089841115612a33575f80fd5b948201945b83861015612a5157855182529482019490820190612a38565b91880151919650909350505080821115612a69575f80fd5b50611ec38582860161296e565b828152604060208201525f612a8e6040830184611f49565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/RaindexV6.pointers.sol b/src/generated/RaindexV6.pointers.sol index 5ad86ab3d0..838901073a 100644 --- a/src/generated/RaindexV6.pointers.sol +++ b/src/generated/RaindexV6.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xb9aa0944893a2aa695250428cee0d2e839f3794aebbc229e2070f064598c4b31); +bytes32 constant BYTECODE_HASH = bytes32(0x6dccd7018126439bb9bceec4cd37f5bcfdd5319979fbf70f9faf41450da10b6f); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x1115EBC9C82F074454F6AC28f123B0684A453aF7); +address constant DEPLOYED_ADDRESS = address(0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2e806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614929565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614991565b6102ba565b61010761013d3660046149fc565b5f9081526020819052604090205460011490565b61016461015f366004614a32565b6103c2565b005b610179610174366004614a97565b610521565b604051908152602001610113565b610107610195366004614ad5565b610535565b6101646101a8366004614a32565b610635565b6101796101bb366004614b6c565b6107c8565b6101d36101ce366004614b9d565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcf565b610fca565b61020e610209366004614c19565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c50565b6113cf565b6040516101139190614cbd565b610164610259366004614c50565b6114b5565b61017961026c366004614d1f565b61150f565b61016461027f366004615191565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9b565b6102d06020850185614b6c565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6c565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661524b565b611ab6565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153a1565b60405180910390a16103a4818585611ae5565b506103bb60015f80516020615f0e83398151915255565b9392505050565b6103ca611a9b565b3385856103d8838383611b1c565b6103e2865f611b4d565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b87565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c07565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615465565b611cf7565b5050505050505061051a60015f80516020615f0e83398151915255565b5050505050565b5f61052d848484611ec5565b949350505050565b5f61054a6001600160a01b038616878661204f565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615525565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615569565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615594565b6001600160a01b038a16929190612084565b5060019695505050505050565b61063d611a9b565b33858561064b838383611b1c565b5f8080806106598a82611b4d565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec5565b90506106a58b826120c0565b94506106b3338e8e886120dc565b90935091505f6106c4338f88612153565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615465565b50505050505050505061051a60015f80516020615f0e83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615569565b5f8061083a611a9b565b61084760808401846155a7565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4d565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b614851565b6108a361487d565b5f60405180606001604052808780608001906108bf91906155a7565b5f8181106108cf576108cf6155ed565b90506020028101906108e19190615601565b6108eb908061561f565b6108f9906040810190615633565b61090660808b018b6155a7565b5f818110610916576109166155ed565b90506020028101906109289190615601565b6020013581811061093b5761093b6155ed565b6109519260206040909202019081019150614b6c565b6001600160a01b0316815260200161096c60808901896155a7565b5f81811061097c5761097c6155ed565b905060200281019061098e9190615601565b610998908061561f565b6109a6906060810190615633565b6109b360808b018b6155a7565b5f8181106109c3576109c36155ed565b90506020028101906109d59190615601565b604001358181106109e8576109e86155ed565b6109fe9260206040909202019081019150614b6c565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a7565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a7565b905081108015610a6457506040840151610a64905f611b4d565b15610e7257610a7660808a018a6155a7565b82818110610a8657610a866155ed565b9050602002810190610a989190615601565b610aa190615679565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155ed565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155ed565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121bc565b5f610b6686611ab6565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d49565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222e565b90505f610c468c604001358360600151611b4d90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4d565b1580610cc357506060820151610cc1905f611b4d565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570f565b15610d6f576040808a015190850151610d41916120c0565b6060850151909250610d539083612733565b60408a0151909150610d659083612780565b60408a0152610dd6565b5f610d8b8560400151866060015161273390919063ffffffff16565b9050610da48a60400151826120c090919063ffffffff16565b9150610dbd8560600151836127b090919063ffffffff16565b60408b0151909350610dcf9083612780565b60408b0152505b610de08c826127e0565b9b50610dec8d836127e0565b9c50610df88285612810565b610e0281856128d1565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615837565b60405180910390a187516001018089526020028801849052610e5884612a7d565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570f565b610e8e5786610e90565b875b9050610e9d818a35612cc0565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612153565b505f9050610ee660a08a018a615921565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f615921565b6040518763ffffffff1660e01b8152600401610f3696959493929190615525565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b87565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155ed565b6020026020010151612cfa565b600101610f76565b505050505050610fc560015f80516020615f0e83398151915255565b915091565b5f610fd3611a9b565b5f61103061102b610fe48780615964565b610ff2906040810190615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0492505050565b612e75565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615633565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615633565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615964565b6110f690615978565b815260200187806020019061110b9190615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615983565b8152602001906001019061112a565b505050918352505060200161116e6040890189615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615983565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab6565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599d565b60405180910390a15f61124b60a08a018a615921565b905011156112e75761129c61126360a08a018a615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8f92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c615921565b6040516112de94939291906159c4565b60405180910390a15b6112f2828888611ae5565b93505050506103bb60015f80516020615f0e83398151915255565b5f80808061132761131e868061561f565b61032c9061524b565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561f565b6113649061524b565b866020013587604001356121bc565b5f6113b1611381878061561f565b61138a9061524b565b60208801356040890135336113a260608c018c6155a7565b6113ab916159f6565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d49565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155ed565b90506020028101906114619190615921565b8560405160200161147493929190615a15565b604051602081830303815290604052612eba565b83828151811061149a5761149a6155ed565b6020908102919091010152600101611431565b505092915050565b6114bd611a9b565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615465565b61150b60015f80516020615f0e83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615569565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a9b565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155ed565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155ed565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155ed565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155ed565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155ed565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155ed565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab6565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a85565b5f6117b286611ab6565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a85565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a38565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d49565b90505f6118ae8383612f5a565b90506118bd815f015184612810565b6118cb816020015183612810565b6118d98160400151846128d1565b6118e78160600151836128d1565b6118f083612cfa565b6118f982612cfa565b606081015181515f9161190c9190612780565b90505f61192a8360400151846020015161278090919063ffffffff16565b9050611936825f612cc0565b806119465750611946815f612cc0565b1561196457604051630d86822160e01b815260040160405180910390fd5b611998338b606001518a6020013581518110611982576119826155ed565b60200260200101515f01518a6080013585611c07565b50506119ce338a606001518a60600135815181106119b8576119b86155ed565b60200260200101515f01518a60a0013584611c07565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3783612a7d565b611a4082612a7d565b80516001600160e01b0316158015611a63575060208101516001600160e01b0316155b15611a81576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615f0e83398151915255565b611aa3612fa8565b60025f80516020615f0e83398151915255565b5f81604051602001611ac89190615ab4565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1790611b0d906104d6565b6104f88385615465565b505050565b80611b17576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7b84848484612fd9565b12979650505050505050565b5f805f611b93856130ad565b9050611b9f845f612cc0565b15611bbd57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc98684613113565b9150915080611bde57611bdb82615ac6565b91505b8115611bf957611bf96001600160a01b038816893085612084565b50925090505b935093915050565b5f80611c138382612cc0565b15611c345760405163793a8f5560e01b815260048101849052602401610316565b83611c5257611c44868685612153565b505f9250829150611cee9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c82866127e0565b9050611c98815f612cc0565b15611cb95760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611ebb57868181518110611d5e57611d5e6155ed565b602002602001015193505f845f015160400151511115611eb3575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd68d8a60200151613140565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e019190615b36565b5f60405180830381865afa158015611e1b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e429190810190615c2e565b9150505f81511115611eb15784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e83908a908590600401615ce4565b5f604051808303815f87803b158015611e9a575f80fd5b505af1158015611eac573d5f803e3d5ffd5b505050505b505b600101611d43565b5050505050505050565b5f8115611eff57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0984613422565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8191908716906370a0823190602401602060405180830381865afa158015611f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615569565b8361342e565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612000919088169063dd62ed3e90604401602060405180830381865afa158015611fd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffa9190615569565b8461342e565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120459061203f84846120c0565b906127e0565b93505050506103bb565b61205c838383600161346e565b611b1757604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120928484848460016134d0565b6120ba57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120cb8383612cc0565b6120d557816103bb565b5090919050565b5f806120e88382612cc0565b156121095760405163793a8f5560e01b815260048101849052602401610316565b8361211957611c44868685611b87565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c8286612780565b5f805f61215f856130ad565b905061216b845f612cc0565b1561218957604051632d1671a360e11b815260040160405180910390fd5b5f6121948583613113565b50905080156121b1576121b16001600160a01b038716888361204f565b969095509350505050565b826060015181815181106121d2576121d26155ed565b60200260200101515f01516001600160a01b0316836040015183815181106121fc576121fc6155ed565b60200260200101515f01516001600160a01b031603611b1757604051631cd2f1c760e21b815260040160405180910390fd5b6122366148e4565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122515790505090506122a66122748a611ab6565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122bb576122bb6155ed565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122fb576122fb6155ed565b60200260200101819052505f6123308a604001518a81518110612320576123206155ed565b60200260200101515f0151613422565b90505f6123828b5f01518c604001518c81518110612350576123506155ed565b60200260200101515f01518d604001518d81518110612371576123716155ed565b602002602001015160200151611ec5565b90506124118b604001518b8151811061239d5761239d6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cf576123cf6155ed565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612427576124276155ed565b602002602001018190525050505f61244e8a606001518981518110612320576123206155ed565b90505f61248f8b5f01518c606001518b8151811061246e5761246e6155ed565b60200260200101515f01518d606001518c81518110612371576123716155ed565b90506124dc8b606001518a815181106124aa576124aa6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cf576123cf6155ed565b836001600403815181106124f2576124f26155ed565b602002602001018190525050506125098186613140565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256987305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156125a1576125a1614d49565b6040519080825280602002602001820160405280156125ca578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125f09190615b36565b5f60405180830381865afa15801561260a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126319190810190615c2e565b9150915060028251101561265d578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126b19087906004908110612680576126806155ed565b602002602001015160038151811061269a5761269a6155ed565b6020026020010151826120c090919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e3576126e36155ed565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127638686868661353d565b915091505f612772838361365c565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136a9565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136d3565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276386868686613c10565b818160800151600481518110612828576128286155ed565b6020026020010151600481518110612842576128426155ed565b6020026020010181815250506120ba815f01515f0151826080015160048151811061286f5761286f6155ed565b60200260200101515f81518110612888576128886155ed565b60200260200101515f1c83608001516004815181106128a9576128a96155ed565b60200260200101516002815181106128c3576128c36155ed565b6020026020010151856120dc565b8181608001516003815181106128e9576128e96155ed565b6020026020010151600481518110612903576129036155ed565b6020908102919091010152805151608082015180515f9190600390811061292c5761292c6155ed565b60200260200101515f81518110612945576129456155ed565b60200260200101515f1c90505f8360800151600381518110612969576129696155ed565b6020026020010151600281518110612983576129836155ed565b602002602001015190505f801b8103612a2a576129a0855f612cc0565b156129c15760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f890866127e0565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a39565b612a3683838388611c07565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6e929190615cfc565b60405180910390a15050505050565b60c08101515115612af7578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac9929091600401615ce4565b5f604051808303815f87803b158015612ae0575f80fd5b505af1158015612af2573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4d8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8d57612b8d614d49565b604051908082528060200260200182016040528015612bb6578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be6578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c069190615b36565b5f60405180830381865afa158015612c20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c479190810190615c2e565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8f918590600401615ce4565b5f604051808303815f87803b158015612ca6575f80fd5b505af1158015612cb8573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cee84848484612fd9565b13979650505050505050565b5f8160800151600381518110612d1257612d126155ed565b6020026020010151600281518110612d2c57612d2c6155ed565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5d57612d5d6155ed565b60200260200101515f81518110612d7657612d766155ed565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dfb838383612153565b50505050505050565b6060604082511015612e2357505060408051602081019091525f815290565b5f60208301519050602060408451612e3b9190615a02565b612e459190615d31565b811115612e6157505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8557505f919050565b50602001515f1a90565b612e9881613d0e565b612eb75780604051630c89984b60e31b81526004016103169190615d50565b50565b60605f612ec78484613d3c565b9050808015612ee857505f3d1180612ee857505f846001600160a01b03163b115b15612efd57612ef5613d4f565b9150506102b4565b8015612f2757604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3a57612f35613d68565b612f53565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f878383613d73565b82526040820152612f988284613d73565b6020830152606082015292915050565b5f80516020615f0e83398151915254600203612fd757604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffe5786859250925050611cee565b505f85841315613012575092949193919260015b8386035f8112604c8213178015613045578215613037575f8994509450505050611cee565b885f94509450505050611cee565b600a82900a8981028a82828161305d5761305d615d1d565b0514613089578415613079575f8b965096505050505050611cee565b8a5f965096505050505050611cee565b841561309e578896509450611cee9350505050565b9550879450611cee9350505050565b5f805f6130b984613ddc565b909250905060018260038111156130d2576130d2615d62565b141580156130f157505f8260038111156130ee576130ee615d62565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d76565b5f806001600160e01b038416601b0b60e085901d613132828287613e69565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315d5761315d614d49565b604051908082528060200260200182016040528015613186578160200160208202803683370190505b5090505f80845111613198575f61319e565b83516001015b85516001010190505f8167ffffffffffffffff8111156131c0576131c0614d49565b6040519080825280602002602001820160405280156131f357816020015b60608152602001906001900390816131de5790505b5090505f613217604080516002815233602082015230818301526060810190915290565b828281518110613229576132296155ed565b60200260200101819052505f5b8751811015613286578180600101925050878181518110613259576132596155ed565b6020026020010151838381518110613273576132736155ed565b6020908102919091010152600101613236565b50855115613418578080600101915050838282815181106132a9576132a96155ed565b60200260200101819052505f5b8651811015613416576133658782815181106132d4576132d46155ed565b60200260200101515f01516133426133108a85815181106132f7576132f76155ed565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613354576133546155ed565b602002602001015160400151613fcf565b61338557604051630a57f30960e31b815260048101829052602401610316565b868181518110613397576133976155ed565b60200260200101515f01516001600160a01b03165f1b8582815181106133bf576133bf6155ed565b60200260200101818152505081806001019250508681815181106133e5576133e56155ed565b602002602001015160200151838381518110613403576134036155ed565b60209081029190910101526001016132b6565b505b5095945050505050565b5f805f6130b98461403f565b5f805f805f61343d878761409e565b9250925092505f8061344f85856140e1565b915091508183801561345e5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c45783831516156134b8573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352c578383151615613520573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613555575f92505f9150613652565b61355f8487615daf565b91505f61356b886141b9565b90505f613577876141b9565b90505f61358483836141e7565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135da57670de0b6b3a7640000820491506012015b633b9aca008211156135f357633b9aca00820491506009015b61271082111561360857612710820491506004015b811561361c57600a82049150600101613608565b6136268187615daf565b95506136488b8a613642878761363d87600a615eae565b614203565b896142cf565b9097509550505050505b5094509492505050565b5f805f61366985856140e1565b9150915080158015613679575081155b156136a157604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b5848461436f565b90945092506136c686868686613c10565b9150915094509492505050565b5f80835f036136ff57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361371057505f905080611cee565b5f805f8061371e8a8a6143c4565b919b509950915061372f88886143c4565b919950975090505f6137408b6141b9565b90505f61374c8a6141b9565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b115784156137a357507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae9565b6f4b3b4ca85a86c47a098a2240000000008310156138cf57678ac7230489e80000831015613833576402540be40083101561380157620186a08310156137f15750620186a090506005613aaa565b506402540be4009050600a613aaa565b655af3107a40008310156138205750655af3107a40009050600e613aaa565b50678ac7230489e8000090506013613aaa565b6b204fce5e3e250261100000008310156138855769152d02c7e14af680000083101561386e575069152d02c7e14af680000090506017613aaa565b506b204fce5e3e250261100000009050601c613aaa565b6d314dc6448d9338c15b0a000000008310156138b457506d314dc6448d9338c15b0a0000000090506021613aaa565b506f4b3b4ca85a86c47a098a22400000000090506026613aaa565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c75773af298d050e4395d69670b12b7f41000000000000831015613962577172cb5bd86321e38cb6ce6682e8000000000083101561394357507172cb5bd86321e38cb6ce6682e800000000009050602b613aaa565b5073af298d050e4395d69670b12b7f4100000000000090506030613aaa565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a3575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aaa565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aaa565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5d577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3557507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aaa565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aaa565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aaa57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abf57600a820491505f1901613aaa565b815f03613ae9576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b11576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2857808d039c50613b66565b600160ff1b9c90038c015f811315613b6657806001600160ff1b03038b13613b5357998a0199613b66565b5f80995099505050505050505050611cee565b5f808e128015613b7557505f8c135b15613b9657600160ff1b8e01808d13613b8e575f613b92565b808d035b9150505b8b818f01039750613bb38f8e613bad888789614203565b8b6142cf565b90995097505f811315613bfd57604c811315613bdd575f809a509a50505050505050505050611cee565b80600a0a8981613bef57613bef615d1d565b059850885f03613bfd575f97505b50969850949650611cee95505050505050565b5f8085158415178015613c3c57865f03613c305784849250925050611cee565b86869250925050611cee565b613c46878761461e565b9097509550613c55858561461e565b909550935085841315613c69579395929492935b838603604c811115613c82578787935093505050611cee565b80600a0a8681613c9457613c94615d1d565b0595505086850180881860ff90811c151589881890911c15168015613cfd57876001600160ff1b0303613ce45760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613d01565b8198505b5096979596505050505050565b5f600882511015613d2057505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d908460600151856040015161273390919063ffffffff16565b915083604001519050613db0836040015183611b4d90919063ffffffff16565b156131395782604001519150613dd38460600151836127b090919063ffffffff16565b90509250929050565b5f80613de6614667565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e609190615eb9565b91509150915091565b5f805f851215613e9657604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea857505f90506001611bff565b8460ff8416850185811215613eda5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2657604c19831215613efd575f809550955050505050611bff565b825f03600a0a9150818481613f1457613f14615d1d565b0495505084029091149150611bff9050565b5f831315613fbf57604d831315613f635760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7957613f79615d1d565b04841115613fad5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bff9050565b8360019550955050505050611bff565b5f836001600160a01b03163b5f0361402d575f80613fed85856146f2565b5090925090505f81600381111561400657614006615d62565b1480156140245750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614038848484614738565b90506103bb565b5f80614049614667565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3c573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140d057600a860460018201600a88065f14935093509350506140da565b8593509150600190505b9250925092565b5f601b83900b8314838382614145577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412557620186a0860595506005850194505b8586601b0b1461414057600a86059550846001019450614125565b61415b565b855f0361415b57505f9250600191506131399050565b848560030b1461419e575f85121561417b57505f92508291506131399050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141de57600160ff1b82036141d85750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61421086866141e7565b91509150815f036142345783818161422a5761422a615d1d565b04925050506103bb565b8382106142655760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561434b576001600160ff1b03841115614338576142fc6001600160ff1b036001615594565b84036143105750600160ff1b905081611cee565b61431b600a85615d31565b61432490615ef9565b61432f846001615daf565b91509150611cee565b61434184615ef9565b8391509150611cee565b6001600160ff1b0384111561436557614324600a85615d31565b5082905081611cee565b5f80600160ff1b84036143ba576001600160ff1b0383036143ad5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143dc57505f915081905060016140da565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c9576f4b3b4ca85a86c47a098a224000000000850515801561443e57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445f576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a757507f80000000000000000000000000000000000000000000000000000000000000138412155b156144c057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614522576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561457157507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458757606485029450600284039350614522565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b757506001600160ff1b018412155b156145c957600a850294506001840393505b600a808602908105861480156145e657506001600160ff1b018512155b156145f5578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462d87876143c4565b9250925092508061465b576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146be575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd7576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614729576020840151604085015160608601515f1a61471b88828585614789565b9550955095505050506140da565b505081515f91506002906140da565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c257505f91506003905082614847565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614813573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483e57505f925060019150829050614847565b92505f91508190505b9450945094915050565b604051806080016040528061486461487d565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148cb60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f761487d565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614939575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614960575f80fd5b50813567ffffffffffffffff811115614977575f80fd5b6020830191508360208260051b8501011115613139575f80fd5b5f805f604084860312156149a3575f80fd5b833567ffffffffffffffff808211156149ba575f80fd5b9085019060a082880312156149cd575f80fd5b909350602085013590808211156149e2575f80fd5b506149ef86828701614950565b9497909650939450505050565b5f60208284031215614a0c575f80fd5b5035919050565b6001600160a01b0381168114612eb7575f80fd5b80356141e281614a13565b5f805f805f60808688031215614a46575f80fd5b8535614a5181614a13565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a7a575f80fd5b614a8688828901614950565b969995985093965092949392505050565b5f805f60608486031215614aa9575f80fd5b8335614ab481614a13565b92506020840135614ac481614a13565b929592945050506040919091013590565b5f805f805f60808688031215614ae9575f80fd5b8535614af481614a13565b94506020860135614b0481614a13565b935060408601359250606086013567ffffffffffffffff80821115614b27575f80fd5b818801915088601f830112614b3a575f80fd5b813581811115614b48575f80fd5b896020828501011115614b59575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7c575f80fd5b81356103bb81614a13565b5f60c08284031215614b97575f80fd5b50919050565b5f60208284031215614bad575f80fd5b813567ffffffffffffffff811115614bc3575f80fd5b61052d84828501614b87565b5f805f60408486031215614be1575f80fd5b833567ffffffffffffffff80821115614bf8575f80fd5b614c0487838801614b87565b945060208601359150808211156149e2575f80fd5b5f60208284031215614c29575f80fd5b813567ffffffffffffffff811115614c3f575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c61575f80fd5b823567ffffffffffffffff811115614c77575f80fd5b614c8385828601614950565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1257603f19888603018452614d00858351614c8f565b94509285019290850190600101614ce4565b5092979650505050505050565b5f8060408385031215614d30575f80fd5b8235614d3b81614a13565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405160a0810167ffffffffffffffff81118282101715614d8057614d80614d49565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df557614df5614d49565b604052919050565b5f82601f830112614e0c575f80fd5b813567ffffffffffffffff811115614e2657614e26614d49565b614e39601f8201601f1916602001614dcc565b818152846020838601011115614e4d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e79575f80fd5b614e81614d5d565b90508135614e8e81614a13565b81526020820135614e9e81614a13565b6020820152604082013567ffffffffffffffff811115614ebc575f80fd5b614ec884828501614dfd565b60408301525092915050565b5f67ffffffffffffffff821115614eed57614eed614d49565b5060051b60200190565b5f60408284031215614f07575f80fd5b614f0f614d86565b90508135614f1c81614a13565b808252506020820135602082015292915050565b5f82601f830112614f3f575f80fd5b81356020614f54614f4f83614ed4565b614dcc565b8083825260208201915060208460061b870101935086841115614f75575f80fd5b602086015b84811015614f9a57614f8c8882614ef7565b835291830191604001614f7a565b509695505050505050565b5f60a08284031215614fb5575f80fd5b614fbd614da9565b9050614fc882614a27565b8152602082013567ffffffffffffffff80821115614fe4575f80fd5b614ff085838601614e69565b60208401526040840135915080821115615008575f80fd5b61501485838601614f30565b6040840152606084013591508082111561502c575f80fd5b5061503984828501614f30565b6060830152506080820135608082015292915050565b5f61505c614f4f84614ed4565b8381529050602080820190600585811b85018781111561507a575f80fd5b855b8181101561516757803567ffffffffffffffff8082111561509b575f80fd5b908801906060828c0312156150ae575f80fd5b6150b6614d5d565b82356150c181614a13565b815282870135828111156150d3575f80fd5b8301601f81018d136150e3575f80fd5b80356150f1614f4f82614ed4565b81815290881b8201890190898101908f83111561510c575f80fd5b928a01925b8284101561512a5783358252928a0192908a0190615111565b848b01525060409150508381013583811115615144575f80fd5b6151508e828701614dfd565b91830191909152508752505093830193830161507c565b50505050509392505050565b5f82601f830112615182575f80fd5b6103bb8383356020850161504f565b5f805f805f61014086880312156151a6575f80fd5b853567ffffffffffffffff808211156151bd575f80fd5b6151c989838a01614fa5565b965060208801359150808211156151de575f80fd5b6151ea89838a01614fa5565b95506151f98960408a01614b87565b945061010088013591508082111561520f575f80fd5b61521b89838a01615173565b9350610120880135915080821115615231575f80fd5b5061523e88828901615173565b9150509295509295909350565b5f6102b43683614fa5565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528a81614a13565b6001600160a01b0390811684526020830135906152a682614a13565b166020840152604082013536839003601e190181126152c3575f80fd5b820160208101903567ffffffffffffffff8111156152df575f80fd5b8036038213156152ed575f80fd5b60606040860152615302606086018284615256565b95945050505050565b5f808335601e19843603018112615320575f80fd5b830160208101925035905067ffffffffffffffff81111561533f575f80fd5b8060061b3603821315613139575f80fd5b8183525f60208085019450825f5b8581101561539657813561537181614a13565b6001600160a01b0316875281830135838801526040968701969091019060010161535e565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c781614a13565b166060830152602083013536849003605e190181126153e4575f80fd5b60a060808401526153fb610100840185830161527e565b905061540a604085018561530b565b605f19808685030160a0870152615422848385615350565b9350615431606088018861530b565b93509150808685030160c08701525061544b838383615350565b92505050608084013560e084015280915050949350505050565b5f615472614f4f84614ed4565b80848252602080830192508560051b85013681111561548f575f80fd5b855b8181101561551957803567ffffffffffffffff808211156154b0575f80fd5b8189019150604082360312156154c4575f80fd5b6154cc614d86565b8235828111156154da575f80fd5b6154e636828601614e69565b82525085830135828111156154f9575f80fd5b61550536828601615173565b828801525087525050938201938201615491565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555d60a083018486615256565b98975050505050505050565b5f60208284031215615579575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615580565b5f808335601e198436030181126155bc575f80fd5b83018035915067ffffffffffffffff8211156155d6575f80fd5b6020019150600581901b3603821315613139575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615615575f80fd5b9190910192915050565b5f8235609e19833603018112615615575f80fd5b5f808335601e19843603018112615648575f80fd5b83018035915067ffffffffffffffff821115615662575f80fd5b6020019150600681901b3603821315613139575f80fd5b5f60808236031215615689575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ad576156ad614d49565b8160405284359150808211156156c1575f80fd5b6156cd36838701614fa5565b8352602085013560208401526040850135604084015260608501359150808211156156f6575f80fd5b5061570336828601615173565b60608301525092915050565b5f6020828403121561571f575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539657815180516001600160a01b031688528301518388015260409096019590820190600101615741565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157be610100850182614c8f565b9050604083015184820360408601526157d7828261572e565b915050606083015184820360608601526157f1828261572e565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b838110156153965781518752958201959082019060010161581b565b5f6001600160a01b03808716835260206080818501528651608080860152615863610100860182615771565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158ff57601f1988830301845284518a815116835289810151878b8501526158d388850182615808565b91890151848303858b01529190506158eb8183614c8f565b968b0196958b0195935050506001016158a5565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615936575f80fd5b83018035915067ffffffffffffffff821115615950575f80fd5b602001915036819003821315613139575f80fd5b5f8235605e19833603018112615615575f80fd5b5f6102b43683614e69565b5f60408284031215615993575f80fd5b6103bb8383614ef7565b6001600160a01b0384168152826020820152606060408201525f6153026060830184615771565b6001600160a01b0385168152836020820152606060408201525f6159ec606083018486615256565b9695505050505050565b5f6103bb36848461504f565b818103818111156102b4576102b4615580565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a5a81840187615771565b90508281036040840152615a6e8186615771565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615771565b5f60018201615ad757615ad7615580565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2957601f19868403018952615b17838351615808565b98840198925090830190600101615afb565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6f610100840182614c8f565b9050606084015160808401526080840151601f19808584030160a0860152615b978383615ade565b925060a08601519150808584030160c0860152615bb48383615808565b925060c08601519150808584030160e0860152506153028282615808565b5f82601f830112615be1575f80fd5b81516020615bf1614f4f83614ed4565b8083825260208201915060208460051b870101935086841115615c12575f80fd5b602086015b84811015614f9a5780518352918301918301615c17565b5f8060408385031215615c3f575f80fd5b825167ffffffffffffffff80821115615c56575f80fd5b818501915085601f830112615c69575f80fd5b81516020615c79614f4f83614ed4565b82815260059290921b84018101918181019089841115615c97575f80fd5b948201945b83861015615cb557855182529482019490820190615c9c565b91880151919650909350505080821115615ccd575f80fd5b50615cda85828601615bd2565b9150509250929050565b828152604060208201525f61052d6040830184615808565b6001600160a01b0383168152604060208201525f61052d6040830184615ade565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4b57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8f565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da257634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad615580565b600181815b80851115615e0857815f1904821115615dee57615dee615580565b80851615615dfb57918102915b93841c9390800290615dd3565b509250929050565b5f82615e1e575060016102b4565b81615e2a57505f6102b4565b8160018114615e405760028114615e4a57615e66565b60019150506102b4565b60ff841115615e5b57615e5b615580565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e89575081810a6102b4565b615e938383615dce565b805f1904821115615ea657615ea6615580565b029392505050565b5f6103bb8383615e10565b5f8060408385031215615eca575f80fd5b825160048110615ed8575f80fd5b602084015190925060ff81168114615eee575f80fd5b809150509250929050565b5f600160ff1b82016141d8576141d861558056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"6080604052348015600e575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055615f2c806100405f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614929565b610284565b60405190151581526020015b60405180910390f35b61010761012a366004614991565b6102ba565b61010761013d3660046149fc565b5f9081526020819052604090205460011490565b61016461015f366004614a32565b6103c2565b005b610179610174366004614a97565b610521565b604051908152602001610113565b610107610195366004614ad5565b610535565b6101646101a8366004614a32565b610635565b6101796101bb366004614b6c565b6107c8565b6101d36101ce366004614b9d565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcf565b610fca565b61020e610209366004614c19565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c50565b6113cf565b6040516101139190614cbd565b610164610259366004614c50565b6114b5565b61017961026c366004614d1f565b61150f565b61016461027f366004615191565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a9b565b6102d06020850185614b6c565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6c565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c8661524b565b611ab6565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e6390610391903390849089906153a1565b60405180910390a16103a4818585611ae5565b506103bb60015f80516020615f0e83398151915255565b9392505050565b6103ca611a9b565b3385856103d8838383611b1c565b6103e2865f611b4d565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b87565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c07565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615465565b611cf7565b5050505050505061051a60015f80516020615f0e83398151915255565b5050505050565b5f61052d848484611ec5565b949350505050565b5f61054a6001600160a01b038616878661204f565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615525565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615569565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615594565b6001600160a01b038a16929190612084565b5060019695505050505050565b61063d611a9b565b33858561064b838383611b1c565b5f8080806106598a82611b4d565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec5565b90506106a58b826120c0565b94506106b3338e8e886120dc565b90935091505f6106c4338f88612153565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615465565b50505050505050505061051a60015f80516020615f0e83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615569565b5f8061083a611a9b565b61084760808401846155a7565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4d565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b614851565b6108a361487d565b5f60405180606001604052808780608001906108bf91906155a7565b5f8181106108cf576108cf6155ed565b90506020028101906108e19190615601565b6108eb908061561f565b6108f9906040810190615633565b61090660808b018b6155a7565b5f818110610916576109166155ed565b90506020028101906109289190615601565b6020013581811061093b5761093b6155ed565b6109519260206040909202019081019150614b6c565b6001600160a01b0316815260200161096c60808901896155a7565b5f81811061097c5761097c6155ed565b905060200281019061098e9190615601565b610998908061561f565b6109a6906060810190615633565b6109b360808b018b6155a7565b5f8181106109c3576109c36155ed565b90506020028101906109d59190615601565b604001358181106109e8576109e86155ed565b6109fe9260206040909202019081019150614b6c565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a7565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a7565b905081108015610a6457506040840151610a64905f611b4d565b15610e7257610a7660808a018a6155a7565b82818110610a8657610a866155ed565b9050602002810190610a989190615601565b610aa190615679565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155ed565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155ed565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121bc565b5f610b6686611ab6565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d49565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222e565b90505f610c468c604001358360600151611b4d90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4d565b1580610cc357506060820151610cc1905f611b4d565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570f565b15610d6f576040808a015190850151610d41916120c0565b6060850151909250610d539083612733565b60408a0151909150610d659083612780565b60408a0152610dd6565b5f610d8b8560400151866060015161273390919063ffffffff16565b9050610da48a60400151826120c090919063ffffffff16565b9150610dbd8560600151836127b090919063ffffffff16565b60408b0151909350610dcf9083612780565b60408b0152505b610de08c826127e0565b9b50610dec8d836127e0565b9c50610df88285612810565b610e0281856128d1565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615837565b60405180910390a187516001018089526020028801849052610e5884612a7d565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570f565b610e8e5786610e90565b875b9050610e9d818a35612cc0565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612153565b505f9050610ee660a08a018a615921565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f615921565b6040518763ffffffff1660e01b8152600401610f3696959493929190615525565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b87565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155ed565b6020026020010151612cfa565b600101610f76565b505050505050610fc560015f80516020615f0e83398151915255565b915091565b5f610fd3611a9b565b5f61103061102b610fe48780615964565b610ff2906040810190615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0492505050565b612e75565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615633565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615633565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615964565b6110f690615978565b815260200187806020019061110b9190615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615983565b8152602001906001019061112a565b505050918352505060200161116e6040890189615633565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615983565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab6565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599d565b60405180910390a15f61124b60a08a018a615921565b905011156112e75761129c61126360a08a018a615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8f92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c615921565b6040516112de94939291906159c4565b60405180910390a15b6112f2828888611ae5565b93505050506103bb60015f80516020615f0e83398151915255565b5f80808061132761131e868061561f565b61032c9061524b565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561f565b6113649061524b565b866020013587604001356121bc565b5f6113b1611381878061561f565b61138a9061524b565b60208801356040890135336113a260608c018c6155a7565b6113ab916159f6565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d49565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155ed565b90506020028101906114619190615921565b8560405160200161147493929190615a15565b604051602081830303815290604052612eba565b83828151811061149a5761149a6155ed565b6020908102919091010152600101611431565b505092915050565b6114bd611a9b565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615465565b61150b60015f80516020615f0e83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615569565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a9b565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155ed565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155ed565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155ed565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155ed565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155ed565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155ed565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab6565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a85565b5f6117b286611ab6565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a85565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a38565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d49565b90505f6118ae8383612f5a565b90506118bd815f015184612810565b6118cb816020015183612810565b6118d98160400151846128d1565b6118e78160600151836128d1565b6118f083612cfa565b6118f982612cfa565b606081015181515f9161190c9190612780565b90505f61192a8360400151846020015161278090919063ffffffff16565b9050611936825f612cc0565b806119465750611946815f612cc0565b1561196457604051630d86822160e01b815260040160405180910390fd5b611998338b606001518a6020013581518110611982576119826155ed565b60200260200101515f01518a6080013585611c07565b50506119ce338a606001518a60600135815181106119b8576119b86155ed565b60200260200101515f01518a60a0013584611c07565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d925060a001905060405180910390a1611a3783612a7d565b611a4082612a7d565b80516001600160e01b0316158015611a63575060208101516001600160e01b0316155b15611a81576040516321badf1f60e01b815260040160405180910390fd5b5050505b61051a60015f80516020615f0e83398151915255565b611aa3612fa8565b60025f80516020615f0e83398151915255565b5f81604051602001611ac89190615ab4565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1790611b0d906104d6565b6104f88385615465565b505050565b80611b17576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7b84848484612fd9565b12979650505050505050565b5f805f611b93856130ad565b9050611b9f845f612cc0565b15611bbd57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc98684613113565b9150915080611bde57611bdb82615ac6565b91505b8115611bf957611bf96001600160a01b038816893085612084565b50925090505b935093915050565b5f80611c138382612cc0565b15611c345760405163793a8f5560e01b815260048101849052602401610316565b83611c5257611c44868685612153565b505f9250829150611cee9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c82866127e0565b9050611c98815f612cc0565b15611cb95760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611ebb57868181518110611d5e57611d5e6155ed565b602002602001015193505f845f015160400151511115611eb3575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd68d8a60200151613140565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611e019190615b36565b5f60405180830381865afa158015611e1b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e429190810190615c2e565b9150505f81511115611eb15784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e83908a908590600401615ce4565b5f604051808303815f87803b158015611e9a575f80fd5b505af1158015611eac573d5f803e3d5ffd5b505050505b505b600101611d43565b5050505050505050565b5f8115611eff57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0984613422565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f8191908716906370a0823190602401602060405180830381865afa158015611f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615569565b8361342e565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91612000919088169063dd62ed3e90604401602060405180830381865afa158015611fd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ffa9190615569565b8461342e565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120459061203f84846120c0565b906127e0565b93505050506103bb565b61205c838383600161346e565b611b1757604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120928484848460016134d0565b6120ba57604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120cb8383612cc0565b6120d557816103bb565b5090919050565b5f806120e88382612cc0565b156121095760405163793a8f5560e01b815260048101849052602401610316565b8361211957611c44868685611b87565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8c8286612780565b5f805f61215f856130ad565b905061216b845f612cc0565b1561218957604051632d1671a360e11b815260040160405180910390fd5b5f6121948583613113565b50905080156121b1576121b16001600160a01b038716888361204f565b969095509350505050565b826060015181815181106121d2576121d26155ed565b60200260200101515f01516001600160a01b0316836040015183815181106121fc576121fc6155ed565b60200260200101515f01516001600160a01b031603611b1757604051631cd2f1c760e21b815260040160405180910390fd5b6122366148e4565b60408051600480825260a082019092526060915f9190816020015b60608152602001906001900390816122515790505090506122a66122748a611ab6565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122bb576122bb6155ed565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122fb576122fb6155ed565b60200260200101819052505f6123308a604001518a81518110612320576123206155ed565b60200260200101515f0151613422565b90505f6123828b5f01518c604001518c81518110612350576123506155ed565b60200260200101515f01518d604001518d81518110612371576123716155ed565b602002602001015160200151611ec5565b90506124118b604001518b8151811061239d5761239d6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cf576123cf6155ed565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612427576124276155ed565b602002602001018190525050505f61244e8a606001518981518110612320576123206155ed565b90505f61248f8b5f01518c606001518b8151811061246e5761246e6155ed565b60200260200101515f01518d606001518c81518110612371576123716155ed565b90506124dc8b606001518a815181106124aa576124aa6155ed565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cf576123cf6155ed565b836001600403815181106124f2576124f26155ed565b602002602001018190525050506125098186613140565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256987305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff8111156125a1576125a1614d49565b6040519080825280602002602001820160405280156125ca578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125f09190615b36565b5f60405180830381865afa15801561260a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126319190810190615c2e565b9150915060028251101561265d578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126b19087906004908110612680576126806155ed565b602002602001015160038151811061269a5761269a6155ed565b6020026020010151826120c090919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e3576126e36155ed565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127638686868661353d565b915091505f612772838361365c565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136a9565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612763868686866136d3565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276386868686613c10565b818160800151600481518110612828576128286155ed565b6020026020010151600481518110612842576128426155ed565b6020026020010181815250506120ba815f01515f0151826080015160048151811061286f5761286f6155ed565b60200260200101515f81518110612888576128886155ed565b60200260200101515f1c83608001516004815181106128a9576128a96155ed565b60200260200101516002815181106128c3576128c36155ed565b6020026020010151856120dc565b8181608001516003815181106128e9576128e96155ed565b6020026020010151600481518110612903576129036155ed565b6020908102919091010152805151608082015180515f9190600390811061292c5761292c6155ed565b60200260200101515f81518110612945576129456155ed565b60200260200101515f1c90505f8360800151600381518110612969576129696155ed565b6020026020010151600281518110612983576129836155ed565b602002602001015190505f801b8103612a2a576129a0855f612cc0565b156129c15760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f890866127e0565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a39565b612a3683838388611c07565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6e929190615cfc565b60405180910390a15050505050565b60c08101515115612af7578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac9929091600401615ce4565b5f604051808303815f87803b158015612ae0575f80fd5b505af1158015612af2573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4d8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8d57612b8d614d49565b604051908082528060200260200182016040528015612bb6578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be6578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c069190615b36565b5f60405180830381865afa158015612c20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c479190810190615c2e565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8f918590600401615ce4565b5f604051808303815f87803b158015612ca6575f80fd5b505af1158015612cb8573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cee84848484612fd9565b13979650505050505050565b5f8160800151600381518110612d1257612d126155ed565b6020026020010151600281518110612d2c57612d2c6155ed565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5d57612d5d6155ed565b60200260200101515f81518110612d7657612d766155ed565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612dfb838383612153565b50505050505050565b6060604082511015612e2357505060408051602081019091525f815290565b5f60208301519050602060408451612e3b9190615a02565b612e459190615d31565b811115612e6157505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8557505f919050565b50602001515f1a90565b612e9881613d0e565b612eb75780604051630c89984b60e31b81526004016103169190615d50565b50565b60605f612ec78484613d3c565b9050808015612ee857505f3d1180612ee857505f846001600160a01b03163b115b15612efd57612ef5613d4f565b9150506102b4565b8015612f2757604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3a57612f35613d68565b612f53565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f878383613d73565b82526040820152612f988284613d73565b6020830152606082015292915050565b5f80516020615f0e83398151915254600203612fd757604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffe5786859250925050611cee565b505f85841315613012575092949193919260015b8386035f8112604c8213178015613045578215613037575f8994509450505050611cee565b885f94509450505050611cee565b600a82900a8981028a82828161305d5761305d615d1d565b0514613089578415613079575f8b965096505050505050611cee565b8a5f965096505050505050611cee565b841561309e578896509450611cee9350505050565b9550879450611cee9350505050565b5f805f6130b984613ddc565b909250905060018260038111156130d2576130d2615d62565b141580156130f157505f8260038111156130ee576130ee615d62565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d76565b5f806001600160e01b038416601b0b60e085901d613132828287613e69565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315d5761315d614d49565b604051908082528060200260200182016040528015613186578160200160208202803683370190505b5090505f80845111613198575f61319e565b83516001015b85516001010190505f8167ffffffffffffffff8111156131c0576131c0614d49565b6040519080825280602002602001820160405280156131f357816020015b60608152602001906001900390816131de5790505b5090505f613217604080516002815233602082015230818301526060810190915290565b828281518110613229576132296155ed565b60200260200101819052505f5b8751811015613286578180600101925050878181518110613259576132596155ed565b6020026020010151838381518110613273576132736155ed565b6020908102919091010152600101613236565b50855115613418578080600101915050838282815181106132a9576132a96155ed565b60200260200101819052505f5b8651811015613416576133658782815181106132d4576132d46155ed565b60200260200101515f01516133426133108a85815181106132f7576132f76155ed565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613354576133546155ed565b602002602001015160400151613fcf565b61338557604051630a57f30960e31b815260048101829052602401610316565b868181518110613397576133976155ed565b60200260200101515f01516001600160a01b03165f1b8582815181106133bf576133bf6155ed565b60200260200101818152505081806001019250508681815181106133e5576133e56155ed565b602002602001015160200151838381518110613403576134036155ed565b60209081029190910101526001016132b6565b505b5095945050505050565b5f805f6130b98461403f565b5f805f805f61343d878761409e565b9250925092505f8061344f85856140e1565b915091508183801561345e5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c45783831516156134b8573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352c578383151615613520573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613555575f92505f9150613652565b61355f8487615daf565b91505f61356b886141b9565b90505f613577876141b9565b90505f61358483836141e7565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135da57670de0b6b3a7640000820491506012015b633b9aca008211156135f357633b9aca00820491506009015b61271082111561360857612710820491506004015b811561361c57600a82049150600101613608565b6136268187615daf565b95506136488b8a613642878761363d87600a615eae565b614203565b896142cf565b9097509550505050505b5094509492505050565b5f805f61366985856140e1565b9150915080158015613679575081155b156136a157604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b5848461436f565b90945092506136c686868686613c10565b9150915094509492505050565b5f80835f036136ff57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361371057505f905080611cee565b5f805f8061371e8a8a6143c4565b919b509950915061372f88886143c4565b919950975090505f6137408b6141b9565b90505f61374c8a6141b9565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b115784156137a357507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae9565b6f4b3b4ca85a86c47a098a2240000000008310156138cf57678ac7230489e80000831015613833576402540be40083101561380157620186a08310156137f15750620186a090506005613aaa565b506402540be4009050600a613aaa565b655af3107a40008310156138205750655af3107a40009050600e613aaa565b50678ac7230489e8000090506013613aaa565b6b204fce5e3e250261100000008310156138855769152d02c7e14af680000083101561386e575069152d02c7e14af680000090506017613aaa565b506b204fce5e3e250261100000009050601c613aaa565b6d314dc6448d9338c15b0a000000008310156138b457506d314dc6448d9338c15b0a0000000090506021613aaa565b506f4b3b4ca85a86c47a098a22400000000090506026613aaa565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c75773af298d050e4395d69670b12b7f41000000000000831015613962577172cb5bd86321e38cb6ce6682e8000000000083101561394357507172cb5bd86321e38cb6ce6682e800000000009050602b613aaa565b5073af298d050e4395d69670b12b7f4100000000000090506030613aaa565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a3575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aaa565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aaa565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5d577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3557507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aaa565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aaa565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aaa57507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abf57600a820491505f1901613aaa565b815f03613ae9576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b11576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2857808d039c50613b66565b600160ff1b9c90038c015f811315613b6657806001600160ff1b03038b13613b5357998a0199613b66565b5f80995099505050505050505050611cee565b5f808e128015613b7557505f8c135b15613b9657600160ff1b8e01808d13613b8e575f613b92565b808d035b9150505b8b818f01039750613bb38f8e613bad888789614203565b8b6142cf565b90995097505f811315613bfd57604c811315613bdd575f809a509a50505050505050505050611cee565b80600a0a8981613bef57613bef615d1d565b059850885f03613bfd575f97505b50969850949650611cee95505050505050565b5f8085158415178015613c3c57865f03613c305784849250925050611cee565b86869250925050611cee565b613c46878761461e565b9097509550613c55858561461e565b909550935085841315613c69579395929492935b838603604c811115613c82578787935093505050611cee565b80600a0a8681613c9457613c94615d1d565b0595505086850180881860ff90811c151589881890911c15168015613cfd57876001600160ff1b0303613ce45760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613d01565b8198505b5096979596505050505050565b5f600882511015613d2057505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d908460600151856040015161273390919063ffffffff16565b915083604001519050613db0836040015183611b4d90919063ffffffff16565b156131395782604001519150613dd38460600151836127b090919063ffffffff16565b90509250929050565b5f80613de6614667565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e609190615eb9565b91509150915091565b5f805f851215613e9657604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea857505f90506001611bff565b8460ff8416850185811215613eda5760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2657604c19831215613efd575f809550955050505050611bff565b825f03600a0a9150818481613f1457613f14615d1d565b0495505084029091149150611bff9050565b5f831315613fbf57604d831315613f635760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7957613f79615d1d565b04841115613fad5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bff9050565b8360019550955050505050611bff565b5f836001600160a01b03163b5f0361402d575f80613fed85856146f2565b5090925090505f81600381111561400657614006615d62565b1480156140245750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614038848484614738565b90506103bb565b5f80614049614667565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3c573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140d057600a860460018201600a88065f14935093509350506140da565b8593509150600190505b9250925092565b5f601b83900b8314838382614145577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412557620186a0860595506005850194505b8586601b0b1461414057600a86059550846001019450614125565b61415b565b855f0361415b57505f9250600191506131399050565b848560030b1461419e575f85121561417b57505f92508291506131399050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141de57600160ff1b82036141d85750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61421086866141e7565b91509150815f036142345783818161422a5761422a615d1d565b04925050506103bb565b8382106142655760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561434b576001600160ff1b03841115614338576142fc6001600160ff1b036001615594565b84036143105750600160ff1b905081611cee565b61431b600a85615d31565b61432490615ef9565b61432f846001615daf565b91509150611cee565b61434184615ef9565b8391509150611cee565b6001600160ff1b0384111561436557614324600a85615d31565b5082905081611cee565b5f80600160ff1b84036143ba576001600160ff1b0383036143ad5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143dc57505f915081905060016140da565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c9576f4b3b4ca85a86c47a098a224000000000850515801561443e57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445f576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a757507f80000000000000000000000000000000000000000000000000000000000000138412155b156144c057678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450c57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614522576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561457157507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458757606485029450600284039350614522565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b757506001600160ff1b018412155b156145c957600a850294506001840393505b600a808602908105861480156145e657506001600160ff1b018512155b156145f5578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462d87876143c4565b9250925092508061465b576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146be575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd7576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614729576020840151604085015160608601515f1a61471b88828585614789565b9550955095505050506140da565b505081515f91506002906140da565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c257505f91506003905082614847565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614813573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483e57505f925060019150829050614847565b92505f91508190505b9450945094915050565b604051806080016040528061486461487d565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148cb60405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f761487d565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614939575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f840112614960575f80fd5b50813567ffffffffffffffff811115614977575f80fd5b6020830191508360208260051b8501011115613139575f80fd5b5f805f604084860312156149a3575f80fd5b833567ffffffffffffffff808211156149ba575f80fd5b9085019060a082880312156149cd575f80fd5b909350602085013590808211156149e2575f80fd5b506149ef86828701614950565b9497909650939450505050565b5f60208284031215614a0c575f80fd5b5035919050565b6001600160a01b0381168114612eb7575f80fd5b80356141e281614a13565b5f805f805f60808688031215614a46575f80fd5b8535614a5181614a13565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a7a575f80fd5b614a8688828901614950565b969995985093965092949392505050565b5f805f60608486031215614aa9575f80fd5b8335614ab481614a13565b92506020840135614ac481614a13565b929592945050506040919091013590565b5f805f805f60808688031215614ae9575f80fd5b8535614af481614a13565b94506020860135614b0481614a13565b935060408601359250606086013567ffffffffffffffff80821115614b27575f80fd5b818801915088601f830112614b3a575f80fd5b813581811115614b48575f80fd5b896020828501011115614b59575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7c575f80fd5b81356103bb81614a13565b5f60c08284031215614b97575f80fd5b50919050565b5f60208284031215614bad575f80fd5b813567ffffffffffffffff811115614bc3575f80fd5b61052d84828501614b87565b5f805f60408486031215614be1575f80fd5b833567ffffffffffffffff80821115614bf8575f80fd5b614c0487838801614b87565b945060208601359150808211156149e2575f80fd5b5f60208284031215614c29575f80fd5b813567ffffffffffffffff811115614c3f575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c61575f80fd5b823567ffffffffffffffff811115614c77575f80fd5b614c8385828601614950565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1257603f19888603018452614d00858351614c8f565b94509285019290850190600101614ce4565b5092979650505050505050565b5f8060408385031215614d30575f80fd5b8235614d3b81614a13565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405290565b6040805190810167ffffffffffffffff81118282101715614d8057614d80614d49565b60405160a0810167ffffffffffffffff81118282101715614d8057614d80614d49565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df557614df5614d49565b604052919050565b5f82601f830112614e0c575f80fd5b813567ffffffffffffffff811115614e2657614e26614d49565b614e39601f8201601f1916602001614dcc565b818152846020838601011115614e4d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e79575f80fd5b614e81614d5d565b90508135614e8e81614a13565b81526020820135614e9e81614a13565b6020820152604082013567ffffffffffffffff811115614ebc575f80fd5b614ec884828501614dfd565b60408301525092915050565b5f67ffffffffffffffff821115614eed57614eed614d49565b5060051b60200190565b5f60408284031215614f07575f80fd5b614f0f614d86565b90508135614f1c81614a13565b808252506020820135602082015292915050565b5f82601f830112614f3f575f80fd5b81356020614f54614f4f83614ed4565b614dcc565b8083825260208201915060208460061b870101935086841115614f75575f80fd5b602086015b84811015614f9a57614f8c8882614ef7565b835291830191604001614f7a565b509695505050505050565b5f60a08284031215614fb5575f80fd5b614fbd614da9565b9050614fc882614a27565b8152602082013567ffffffffffffffff80821115614fe4575f80fd5b614ff085838601614e69565b60208401526040840135915080821115615008575f80fd5b61501485838601614f30565b6040840152606084013591508082111561502c575f80fd5b5061503984828501614f30565b6060830152506080820135608082015292915050565b5f61505c614f4f84614ed4565b8381529050602080820190600585811b85018781111561507a575f80fd5b855b8181101561516757803567ffffffffffffffff8082111561509b575f80fd5b908801906060828c0312156150ae575f80fd5b6150b6614d5d565b82356150c181614a13565b815282870135828111156150d3575f80fd5b8301601f81018d136150e3575f80fd5b80356150f1614f4f82614ed4565b81815290881b8201890190898101908f83111561510c575f80fd5b928a01925b8284101561512a5783358252928a0192908a0190615111565b848b01525060409150508381013583811115615144575f80fd5b6151508e828701614dfd565b91830191909152508752505093830193830161507c565b50505050509392505050565b5f82601f830112615182575f80fd5b6103bb8383356020850161504f565b5f805f805f61014086880312156151a6575f80fd5b853567ffffffffffffffff808211156151bd575f80fd5b6151c989838a01614fa5565b965060208801359150808211156151de575f80fd5b6151ea89838a01614fa5565b95506151f98960408a01614b87565b945061010088013591508082111561520f575f80fd5b61521b89838a01615173565b9350610120880135915080821115615231575f80fd5b5061523e88828901615173565b9150509295509295909350565b5f6102b43683614fa5565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528a81614a13565b6001600160a01b0390811684526020830135906152a682614a13565b166020840152604082013536839003601e190181126152c3575f80fd5b820160208101903567ffffffffffffffff8111156152df575f80fd5b8036038213156152ed575f80fd5b60606040860152615302606086018284615256565b95945050505050565b5f808335601e19843603018112615320575f80fd5b830160208101925035905067ffffffffffffffff81111561533f575f80fd5b8060061b3603821315613139575f80fd5b8183525f60208085019450825f5b8581101561539657813561537181614a13565b6001600160a01b0316875281830135838801526040968701969091019060010161535e565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c781614a13565b166060830152602083013536849003605e190181126153e4575f80fd5b60a060808401526153fb610100840185830161527e565b905061540a604085018561530b565b605f19808685030160a0870152615422848385615350565b9350615431606088018861530b565b93509150808685030160c08701525061544b838383615350565b92505050608084013560e084015280915050949350505050565b5f615472614f4f84614ed4565b80848252602080830192508560051b85013681111561548f575f80fd5b855b8181101561551957803567ffffffffffffffff808211156154b0575f80fd5b8189019150604082360312156154c4575f80fd5b6154cc614d86565b8235828111156154da575f80fd5b6154e636828601614e69565b82525085830135828111156154f9575f80fd5b61550536828601615173565b828801525087525050938201938201615491565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555d60a083018486615256565b98975050505050505050565b5f60208284031215615579575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b4615580565b5f808335601e198436030181126155bc575f80fd5b83018035915067ffffffffffffffff8211156155d6575f80fd5b6020019150600581901b3603821315613139575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615615575f80fd5b9190910192915050565b5f8235609e19833603018112615615575f80fd5b5f808335601e19843603018112615648575f80fd5b83018035915067ffffffffffffffff821115615662575f80fd5b6020019150600681901b3603821315613139575f80fd5b5f60808236031215615689575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ad576156ad614d49565b8160405284359150808211156156c1575f80fd5b6156cd36838701614fa5565b8352602085013560208401526040850135604084015260608501359150808211156156f6575f80fd5b5061570336828601615173565b60608301525092915050565b5f6020828403121561571f575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539657815180516001600160a01b031688528301518388015260409096019590820190600101615741565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157be610100850182614c8f565b9050604083015184820360408601526157d7828261572e565b915050606083015184820360608601526157f1828261572e565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b838110156153965781518752958201959082019060010161581b565b5f6001600160a01b03808716835260206080818501528651608080860152615863610100860182615771565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158ff57601f1988830301845284518a815116835289810151878b8501526158d388850182615808565b91890151848303858b01529190506158eb8183614c8f565b968b0196958b0195935050506001016158a5565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615936575f80fd5b83018035915067ffffffffffffffff821115615950575f80fd5b602001915036819003821315613139575f80fd5b5f8235605e19833603018112615615575f80fd5b5f6102b43683614e69565b5f60408284031215615993575f80fd5b6103bb8383614ef7565b6001600160a01b0384168152826020820152606060408201525f6153026060830184615771565b6001600160a01b0385168152836020820152606060408201525f6159ec606083018486615256565b9695505050505050565b5f6103bb36848461504f565b818103818111156102b4576102b4615580565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a5a81840187615771565b90508281036040840152615a6e8186615771565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb6020830184615771565b5f60018201615ad757615ad7615580565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2957601f19868403018952615b17838351615808565b98840198925090830190600101615afb565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6f610100840182614c8f565b9050606084015160808401526080840151601f19808584030160a0860152615b978383615ade565b925060a08601519150808584030160c0860152615bb48383615808565b925060c08601519150808584030160e0860152506153028282615808565b5f82601f830112615be1575f80fd5b81516020615bf1614f4f83614ed4565b8083825260208201915060208460051b870101935086841115615c12575f80fd5b602086015b84811015614f9a5780518352918301918301615c17565b5f8060408385031215615c3f575f80fd5b825167ffffffffffffffff80821115615c56575f80fd5b818501915085601f830112615c69575f80fd5b81516020615c79614f4f83614ed4565b82815260059290921b84018101918181019089841115615c97575f80fd5b948201945b83861015615cb557855182529482019490820190615c9c565b91880151919650909350505080821115615ccd575f80fd5b50615cda85828601615bd2565b9150509250929050565b828152604060208201525f61052d6040830184615808565b6001600160a01b0383168152604060208201525f61052d6040830184615ade565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4b57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8f565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da257634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad615580565b600181815b80851115615e0857815f1904821115615dee57615dee615580565b80851615615dfb57918102915b93841c9390800290615dd3565b509250929050565b5f82615e1e575060016102b4565b81615e2a57505f6102b4565b8160018114615e405760028114615e4a57615e66565b60019150506102b4565b60ff841115615e5b57615e5b615580565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e89575081810a6102b4565b615e938383615dce565b805f1904821115615ea657615ea6615580565b029392505050565b5f6103bb8383615e10565b5f8060408385031215615eca575f80fd5b825160048110615ed8575f80fd5b602084015190925060ff81168114615eee575f80fd5b809150509250929050565b5f600160ff1b82016141d8576141d861558056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; + hex"608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063613255ab11610093578063ac9650d811610063578063ac9650d81461022b578063d7e442ec1461024b578063d9d98ce41461025e578063fa50118214610271575f80fd5b8063613255ab146101ad57806369c72856146101c0578063709fb8a5146101e85780639235084d146101fb575f80fd5b80632fbc4ba0116100ce5780632fbc4ba01461015157806341d1514f146101665780635cffe9de14610187578063607461191461019a575f80fd5b806301ffc9a7146100f45780631f69cb751461011c5780632cb77e9f1461012f575b5f80fd5b610107610102366004614927565b610284565b60405190151581526020015b60405180910390f35b61010761012a36600461498f565b6102ba565b61010761013d3660046149fa565b5f9081526020819052604090205460011490565b61016461015f366004614a30565b6103c2565b005b610179610174366004614a95565b610521565b604051908152602001610113565b610107610195366004614ad3565b610535565b6101646101a8366004614a30565b610635565b6101796101bb366004614b6a565b6107c8565b6101d36101ce366004614b9b565b610830565b60408051928352602083019190915201610113565b6101076101f6366004614bcd565b610fca565b61020e610209366004614c17565b61130d565b604080519315158452602084019290925290820152606001610113565b61023e610239366004614c4e565b6113cf565b6040516101139190614cbb565b610164610259366004614c4e565b6114b5565b61017961026c366004614d1d565b61150f565b61016461027f36600461518f565b6115a9565b5f6001600160e01b0319821663e414309160e01b14806102b457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f6102c3611a99565b6102d06020850185614b6a565b6001600160a01b0316336001600160a01b03161461031f576102f56020850185614b6a565b6040516335252be360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b5f61033161032c86615249565b611ab4565b5f818152602081905260409020549091505f19016103a4575f818152602081905260408082209190915551600192507f09d18501db0080ca2d6cd7c17fa7255daff4b2d503ea93b76ff68b6752ea8e63906103919033908490899061539f565b60405180910390a16103a4818585611ae3565b506103bb60015f80516020615f0c83398151915255565b9392505050565b6103ca611a99565b3385856103d8838383611b1a565b6103e2865f611b4b565b610417576040516306dde9c360e41b81523360048201526001600160a01b038916602482015260448101889052606401610316565b5f80610424338b8a611b85565b604080513381526001600160a01b038e1660208201529081018c90526060810183905291935091507f7f9dfa19cf1cc2f806f2f860fbc9c056b601fb1afc0e9b843dfe5c63616268e69060800160405180910390a15f80610487338d8d8d611c05565b909250905087156104fd5760408051600581526001600160a01b038e1660208201528082018d9052606081018490526080810183905260ff851660a082015260c081019091526104fd906104ee905b60408051600181526020810192909252818101905290565b6104f88a8c615463565b611cf5565b5050505050505061051a60015f80516020615f0c83398151915255565b5050505050565b5f61052d848484611ec3565b949350505050565b5f61054a6001600160a01b038616878661204d565b6040516323e30c8b60e01b81525f906001600160a01b038816906323e30c8b906105829033908a908a9087908b908b90600401615523565b6020604051808303815f875af115801561059e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c29190615567565b90507f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9811461060757604051630b6c58a960e31b815260048101829052602401610316565b61062887306106165f89615592565b6001600160a01b038a16929190612082565b5060019695505050505050565b61063d611a99565b33858561064b838383611b1a565b5f8080806106598a82611b4b565b61068d57604051623a3a4d60e21b81523360048201526001600160a01b038d166024820152604481018c9052606401610316565b5f610699338e8e611ec3565b90506106a58b826120be565b94506106b3338e8e886120da565b90935091505f6106c4338f88612151565b80965081925050507f8045c25080b0868951141ed0a91720bcad09a8364a2b3109ee1fd49c1f0bc8b8338f8f8f8a86604051610736969594939291906001600160a01b03968716815294909516602085015260408401929092526060830152608082015260a081019190915260c00190565b60405180910390a1505060408051600681526001600160a01b038e1660208201528082018d9052606081018490526080810183905260a081018c905260ff851660c0820152600160e08201908152610100820182905261012082019092529089156107a9576107a9816104f88c8e615463565b50505050505050505061051a60015f80516020615f0c83398151915255565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b49190615567565b5f8061083a611a99565b61084760808401846155a5565b90505f0361086857604051639c95219f60e01b815260040160405180910390fd5b61087660208401355f611b4b565b6108935760405163315f9e2360e21b815260040160405180910390fd5b61089b61484f565b6108a361487b565b5f60405180606001604052808780608001906108bf91906155a5565b5f8181106108cf576108cf6155eb565b90506020028101906108e191906155ff565b6108eb908061561d565b6108f9906040810190615631565b61090660808b018b6155a5565b5f818110610916576109166155eb565b905060200281019061092891906155ff565b6020013581811061093b5761093b6155eb565b6109519260206040909202019081019150614b6a565b6001600160a01b0316815260200161096c60808901896155a5565b5f81811061097c5761097c6155eb565b905060200281019061098e91906155ff565b610998908061561d565b6109a6906060810190615631565b6109b360808b018b6155a5565b5f8181106109c3576109c36155eb565b90506020028101906109d591906155ff565b604001358181106109e8576109e86155eb565b6109fe9260206040909202019081019150614b6a565b6001600160a01b03168152602088810135910152905060605f610a2460808901896155a5565b6040805160019092016020028201905292505f91508190505b610a4a60808a018a6155a5565b905081108015610a6457506040840151610a64905f611b4b565b15610e7257610a7660808a018a6155a5565b82818110610a8657610a866155eb565b9050602002810190610a9891906155ff565b610aa190615677565b9550855f01519450835f01516001600160a01b03168560400151876020015181518110610ad057610ad06155eb565b60200260200101515f01516001600160a01b0316141580610b2b575083602001516001600160a01b03168560600151876040015181518110610b1457610b146155eb565b60200260200101515f01516001600160a01b031614155b15610b495760405163936bb5ad60e01b815260040160405180910390fd5b610b5c85876020015188604001516121ba565b5f610b6686611ab4565b5f81815260208190526040902054909150610bcb578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a1610e69565b5f610c288789602001518a60400151338c606001515f67ffffffffffffffff811115610bf957610bf9614d47565b604051908082528060200260200182016040528015610c22578160200160208202803683370190505b5061222c565b90505f610c468c604001358360600151611b4b90919063ffffffff16565b15610c9c578751604080513381526001600160a01b03909216602083015281018490527fe3151dc8cb7a54ffc4baabd28c1f241c94d510b5e5b502491ac3cad6c16316d5906060015b60405180910390a1610e5b565b6040820151610cab905f611b4b565b1580610cc357506060820151610cc1905f611b4b565b155b15610d10578751604080513381526001600160a01b03909216602083015281018490527f500b713857325f9e6dcb52ae832eca9109d107ed1aae9cb4928b4c1e13f051aa90606001610c8f565b600190505f808d6060016020810190610d29919061570d565b15610d6f576040808a015190850151610d41916120be565b6060850151909250610d539083612731565b60408a0151909150610d65908361277e565b60408a0152610dd6565b5f610d8b8560400151866060015161273190919063ffffffff16565b9050610da48a60400151826120be90919063ffffffff16565b9150610dbd8560600151836127ae90919063ffffffff16565b60408b0151909350610dcf908361277e565b60408b0152505b610de08c826127de565b9b50610dec8d836127de565b9c50610df8828561280e565b610e0281856128cf565b7f194f1feb3b4d7076a2c272e774e792e0c48bb8c7aa1a9a3671c1cd6da9e6b4c1338c8484604051610e379493929190615835565b60405180910390a187516001018089526020028801849052610e5884612a7b565b50505b8480610e645750805b945050505b50600101610a3d565b505f610e8460808a0160608b0161570d565b610e8e5786610e90565b875b9050610e9d818a35612cbe565b15610ec55760405163573b6f4160e01b81528935600482015260248101829052604401610316565b50610ed533846020015189612151565b505f9050610ee660a08a018a61591f565b9050118015610ef25750805b15610f645760208301518351339163691f9ed7918a8a610f1560a08f018f61591f565b6040518763ffffffff1660e01b8152600401610f3696959493929190615523565b5f604051808303815f87803b158015610f4d575f80fd5b505af1158015610f5f573d5f803e3d5ffd5b505050505b610f7233845f015188611b85565b50505f5b8251811015610fa957610fa1838281518110610f9457610f946155eb565b6020026020010151612cf8565b600101610f76565b505050505050610fc560015f80516020615f0c83398151915255565b915091565b5f610fd3611a99565b5f61103061102b610fe48780615962565b610ff290604081019061591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e0292505050565b612e73565b90505f811161105257604051632cff108b60e21b815260040160405180910390fd5b6001811161107357604051633c8270bd60e21b815260040160405180910390fd5b6110806020860186615631565b90505f036110a157604051636c44ef8f60e01b815260040160405180910390fd5b6110ae6040860186615631565b90505f036110cf5760405163540e5f0b60e01b815260040160405180910390fd5b6040805160a081019091523381525f90602081016110ed8880615962565b6110f690615976565b815260200187806020019061110b9190615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111565761114760408302860136819003810190615981565b8152602001906001019061112a565b505050918352505060200161116e6040890189615631565b808060200260200160405190810160405280939291908181526020015f905b828210156111b9576111aa60408302860136819003810190615981565b8152602001906001019061118d565b50505050508152602001876060013581525090505f6111d782611ab4565b5f818152602081905260409020549091501580156112f2575f828152602081905260409081902060019055835190517f87491344dfbcf91f6cbbc610cbbeedc85313d37a02df0c93527f7ea5f8db717f91611235918590879061599b565b60405180910390a15f61124b60a08a018a61591f565b905011156112e75761129c61126360a08a018a61591f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612e8d92505050565b82517fd46c2c56b35c8210e9e712ec3f02242d5fc90187c0ac8ed80cc33626846ec36990836112ce60a08c018c61591f565b6040516112de94939291906159c2565b60405180910390a15b6112f2828888611ae3565b93505050506103bb60015f80516020615f0c83398151915255565b5f80808061132761131e868061561d565b61032c90615249565b5f8181526020819052604090205490915060011461134e57505f92508291508190506113c8565b61137361135b868061561d565b61136490615249565b866020013587604001356121ba565b5f6113b1611381878061561d565b61138a90615249565b60208801356040890135336113a260608c018c6155a5565b6113ab916159f4565b5f610bf9565b905060018160400151826060015194509450945050505b9193909250565b604080515f8152602081019091526060908267ffffffffffffffff8111156113f9576113f9614d47565b60405190808252806020026020018201604052801561142c57816020015b60608152602001906001900390816114175790505b5091505f5b838110156114ad576114883086868481811061144f5761144f6155eb565b9050602002810190611461919061591f565b8560405160200161147493929190615a13565b604051602081830303815290604052612eb8565b83828151811061149a5761149a6155eb565b6020908102919091010152600101611431565b505092915050565b6114bd611a99565b604080515f808252602082019092526114f5916114ea565b60608152602001906001900390816114d55790505b506104f88385615463565b61150b60015f80516020615f0c83398151915255565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115779190615567565b5f036115a157604051633c5bf76960e21b81526001600160a01b0384166004820152602401610316565b505f92915050565b6115b1611a99565b835185516001600160a01b039182169116036115e057604051630a98f1f360e21b815260040160405180910390fd5b83604001518360400135815181106115fa576115fa6155eb565b60200260200101515f01516001600160a01b03168560600151846020013581518110611628576116286155eb565b60200260200101515f01516001600160a01b03161415806116a1575060408501518051843590811061165c5761165c6155eb565b60200260200101515f01516001600160a01b0316846060015184606001358151811061168a5761168a6155eb565b60200260200101515f01516001600160a01b031614155b156116bf5760405163936bb5ad60e01b815260040160405180910390fd5b84606001518360200135815181106116d9576116d96155eb565b60200260200101515f01516001600160a01b03168560400151845f013581518110611706576117066155eb565b60200260200101515f01516001600160a01b03160361173857604051631cd2f1c760e21b815260040160405180910390fd5b5f61174286611ab4565b5f818152602081905260409020549091506117a8578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a150611a83565b5f6117b286611ab4565b5f81815260208190526040902054909150611819578551604080513381526001600160a01b03909216602083015281018290527fb70c12fa453793fa6818ec07c91e74363a47aa6a6829dcd9533937fdf30314f39060600160405180910390a15050611a83565b7f6fa7f4c28634b0a9d6831401c45ae468195fb63aed07308935c35374ff5d9e393388888860405161184e9493929190615a36565b60405180910390a1505083515f906118729087908635906020880135908686610bf9565b90505f6118a186866040013587606001358a5f0151885f67ffffffffffffffff811115610bf957610bf9614d47565b90505f6118ae8383612f58565b606081015181519192505f916118c39161277e565b90505f6118e18360400151846020015161277e90919063ffffffff16565b90506118ed825f612cbe565b806118fd57506118fd815f612cbe565b1561191b57604051630d86822160e01b815260040160405180910390fd5b8251611927908661280e565b61193583602001518561280e565b6119438360400151866128cf565b6119518360600151856128cf565b61195a85612cf8565b61196384612cf8565b611997338b606001518a6020013581518110611981576119816155eb565b60200260200101515f01518a6080013585611c05565b50506119cd338a606001518a60600135815181106119b7576119b76155eb565b60200260200101515f01518a60a0013584611c05565b5050604080513381528451602080830191909152850151818301529084015160608083019190915284015160808201527fd9fa84dd790c969daa5c33d8050dc06b4a9b59d5b42e2be5f5e8ae20447f618d9060a00160405180910390a1611a3385612a7b565b611a3c84612a7b565b82516001600160e01b0316158015611a5f575060208301516001600160e01b0316155b15611a7d576040516321badf1f60e01b815260040160405180910390fd5b50505050505b61051a60015f80516020615f0c83398151915255565b611aa1612fa6565b60025f80516020615f0c83398151915255565b5f81604051602001611ac69190615ab2565b604051602081830303815290604052805190602001209050919050565b604080516002815260208101859052338183015260608101909152611b1590611b0b906104d6565b6104f88385615463565b505050565b80611b15576040516305dbdfd960e41b81526001600160a01b03808516600483015283166024820152604401610316565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d611b7984848484612fd7565b12979650505050505050565b5f805f611b91856130ab565b9050611b9d845f612cbe565b15611bbb57604051632eaefac360e21b815260040160405180910390fd5b5f80611bc78684613111565b9150915080611bdc57611bd982615ac4565b91505b8115611bf757611bf76001600160a01b038816893085612082565b50925090505b935093915050565b5f80611c118382612cbe565b15611c325760405163793a8f5560e01b815260048101849052602401610316565b83611c5057611c42868685612151565b505f9250829150611cec9050565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a82866127de565b9050611c96815f612cbe565b15611cb75760405163c5e12af560e01b815260048101829052602401610316565b6001600160a01b038089165f908152600160209081526040808320938b16835292815282822089835290522081905590925090505b94509492505050565b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b8651811015611eb957868181518110611d5c57611d5c6155eb565b602002602001015193505f845f015160400151511115611eb1575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001611dd48d8a6020015161313e565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401611dff9190615b34565b5f60405180830381865afa158015611e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e409190810190615c2c565b9150505f81511115611eaf5784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490611e81908a908590600401615ce2565b5f604051808303815f87803b158015611e98575f80fd5b505af1158015611eaa573d5f803e3d5ffd5b505050505b505b600101611d41565b5050505050505050565b5f8115611efd57506001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546103bb565b5f611f0784613420565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f91611f7f91908716906370a0823190602401602060405180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f799190615567565b8361342c565b50604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529192505f91611ffe919088169063dd62ed3e90604401602060405180830381865afa158015611fd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff89190615567565b8461342c565b506001600160a01b038089165f908152600160209081526040808320938b168352928152828220828052905220549091506120439061203d84846120be565b906127de565b93505050506103bb565b61205a838383600161346c565b611b1557604051635274afe760e01b81526001600160a01b0384166004820152602401610316565b6120908484848460016134ce565b6120b857604051635274afe760e01b81526001600160a01b0385166004820152602401610316565b50505050565b5f6120c98383612cbe565b6120d357816103bb565b5090919050565b5f806120e68382612cbe565b156121075760405163793a8f5560e01b815260048101849052602401610316565b8361211757611c42868685611b85565b6001600160a01b038087165f908152600160209081526040808320938916835292815282822087835290529081205490611c8a828661277e565b5f805f61215d856130ab565b9050612169845f612cbe565b1561218757604051632d1671a360e11b815260040160405180910390fd5b5f6121928583613111565b50905080156121af576121af6001600160a01b038716888361204d565b969095509350505050565b826060015181815181106121d0576121d06155eb565b60200260200101515f01516001600160a01b0316836040015183815181106121fa576121fa6155eb565b60200260200101515f01516001600160a01b031603611b1557604051631cd2f1c760e21b815260040160405180910390fd5b6122346148e2565b60408051600480825260a082019092526060915f9190816020015b606081526020019060019003908161224f5790505090506122a46122728a611ab4565b8a51604080516003815260208101939093526001600160a01b0391821683820152908916606083015260808201905290565b8160018003815181106122b9576122b96155eb565b602090810291909101015260408051600280825260608201909252908160200160208202803683375050825183915060019081106122f9576122f96155eb565b60200260200101819052505f61232e8a604001518a8151811061231e5761231e6155eb565b60200260200101515f0151613420565b90505f6123808b5f01518c604001518c8151811061234e5761234e6155eb565b60200260200101515f01518d604001518d8151811061236f5761236f6155eb565b602002602001015160200151611ec3565b905061240f8b604001518b8151811061239b5761239b6155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d604001518d815181106123cd576123cd6155eb565b602002602001015160200151845f801b60408051600581526020810196909652858101949094526060850192909252608084015260a083015260c08201905290565b83600160030381518110612425576124256155eb565b602002602001018190525050505f61244c8a60600151898151811061231e5761231e6155eb565b90505f61248d8b5f01518c606001518b8151811061246c5761246c6155eb565b60200260200101515f01518d606001518c8151811061236f5761236f6155eb565b90506124da8b606001518a815181106124a8576124a86155eb565b60200260200101515f01516001600160a01b03165f1b8360ff165f1b8d606001518c815181106123cd576123cd6155eb565b836001600403815181106124f0576124f06155eb565b60200260200101819052505050612507818661313e565b9150505f885f01516001600160a01b031690505f808a602001515f01516001600160a01b031663d04dfe236040518060e001604052808e60200151602001516001600160a01b0316815260200161256787305f9182526020526040902090565b81526020018e602001516040015181526020015f81526020018781526020015f67ffffffffffffffff81111561259f5761259f614d47565b6040519080825280602002602001820160405280156125c8578160200160208202803683370190505b508152602001898152506040518263ffffffff1660e01b81526004016125ee9190615b34565b5f60405180830381865afa158015612608573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261262f9190810190615c2c565b9150915060028251101561265b578151604051630fbb8e5560e21b815260040161031691815260200190565b6020820151604083015185516126af908790600490811061267e5761267e6155eb565b6020026020010151600381518110612698576126986155eb565b6020026020010151826120be90919063ffffffff16565b60408051600281526020810183905280820185905260608101909152909150866002815181106126e1576126e16155eb565b60200260200101819052506040518060e001604052808e81526020018c81526020018281526020018381526020018781526020018681526020018481525096505050505050509695505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d84806127618686868661353b565b915091505f612770838361365a565b9a9950505050505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136a7565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d8480612761868686866136d1565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d848061276186868686613c0e565b818160800151600481518110612826576128266155eb565b6020026020010151600481518110612840576128406155eb565b6020026020010181815250506120b8815f01515f0151826080015160048151811061286d5761286d6155eb565b60200260200101515f81518110612886576128866155eb565b60200260200101515f1c83608001516004815181106128a7576128a76155eb565b60200260200101516002815181106128c1576128c16155eb565b6020026020010151856120da565b8181608001516003815181106128e7576128e76155eb565b6020026020010151600481518110612901576129016155eb565b6020908102919091010152805151608082015180515f9190600390811061292a5761292a6155eb565b60200260200101515f81518110612943576129436155eb565b60200260200101515f1c90505f8360800151600381518110612967576129676155eb565b6020026020010151600281518110612981576129816155eb565b602002602001015190505f801b8103612a285761299e855f612cbe565b156129bf5760405163793a8f5560e01b815260048101869052602401610316565b6001600160a01b038084165f9081526001602090815260408083209386168352928152828220848352905220546129f690866127de565b6001600160a01b038085165f908152600160209081526040808320938716835292815282822085835290522055612a37565b612a3483838388611c05565b50505b7f4cb6e22a3e7e651d7cf0376cff48f20f5007a54147777865be7f5f6c38c50f4a338560800151604051612a6c929190615cfa565b60405180910390a15050505050565b60c08101515115612af5578051602090810151015160a082015160c083015160405163012c676d60e21b81526001600160a01b03909316926304b19db492612ac7929091600401615ce2565b5f604051808303815f87803b158015612ade575f80fd5b505af1158015612af0573d5f803e3d5ffd5b505050505b5f815f0151602001515f01516001600160a01b031663d04dfe236040518060e00160405280855f015160200151602001516001600160a01b03168152602001612b4b8660a00151305f9182526020526040902090565b8152602001855f01516020015160400151815260200160018152602001856080015181526020015f67ffffffffffffffff811115612b8b57612b8b614d47565b604051908082528060200260200182016040528015612bb4578160200160208202803683370190505b5081526020015f604051908082528060200260200182016040528015612be4578160200160208202803683370190505b508152506040518263ffffffff1660e01b8152600401612c049190615b34565b5f60405180830381865afa158015612c1e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c459190810190615c2c565b9150505f8151111561150b578151602090810151015160a083015160405163012c676d60e21b81526001600160a01b03909216916304b19db491612c8d918590600401615ce2565b5f604051808303815f87803b158015612ca4575f80fd5b505af1158015612cb6573d5f803e3d5ffd5b505050505050565b5f6001600160e01b03838116601b90810b9160e086811d9291861690910b9085901d612cec84848484612fd7565b13979650505050505050565b5f8160800151600381518110612d1057612d106155eb565b6020026020010151600281518110612d2a57612d2a6155eb565b602002602001015190505f801b810361150b57815151608083015180515f91906003908110612d5b57612d5b6155eb565b60200260200101515f81518110612d7457612d746155eb565b6020908102919091018101516001600160a01b038481165f9081526001845260408082209284168252918452818120878252909352909120549091506001600160e01b0381161561051a576001600160a01b038084165f9081526001602090815260408083209386168352928152828220878352905290812055612df9838383612151565b50505050505050565b6060604082511015612e2157505060408051602081019091525f815290565b5f60208301519050602060408451612e399190615a00565b612e439190615d2f565b811115612e5f57505060408051602081019091525f8152919050565b600181016020026020840101915050919050565b5f81515f03612e8357505f919050565b50602001515f1a90565b612e9681613d0c565b612eb55780604051630c89984b60e31b81526004016103169190615d4e565b50565b60605f612ec58484613d3a565b9050808015612ee657505f3d1180612ee657505f846001600160a01b03163b115b15612efb57612ef3613d4d565b9150506102b4565b8015612f2557604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b3d15612f3857612f33613d66565b612f51565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b604080516080810182525f808252602082018190529181018290526060810191909152612f858383613d71565b82526040820152612f968284613d71565b6020830152606082015292915050565b5f80516020615f0c83398151915254600203612fd557604051633ee5aeb560e01b815260040160405180910390fd5b565b5f8085158415178187128286121817858414178015612ffc5786859250925050611cec565b505f85841315613010575092949193919260015b8386035f8112604c8213178015613043578215613035575f8994509450505050611cec565b885f94509450505050611cec565b600a82900a8981028a82828161305b5761305b615d1b565b0514613087578415613077575f8b965096505050505050611cec565b8a5f965096505050505050611cec565b841561309c578896509450611cec9350505050565b9550879450611cec9350505050565b5f805f6130b784613dda565b909250905060018260038111156130d0576130d0615d60565b141580156130ef57505f8260038111156130ec576130ec615d60565b14155b156103bb57838260405163ee07877f60e01b8152600401610316929190615d74565b5f806001600160e01b038416601b0b60e085901d613130828287613e67565b9350935050505b9250929050565b60605f825167ffffffffffffffff81111561315b5761315b614d47565b604051908082528060200260200182016040528015613184578160200160208202803683370190505b5090505f80845111613196575f61319c565b83516001015b85516001010190505f8167ffffffffffffffff8111156131be576131be614d47565b6040519080825280602002602001820160405280156131f157816020015b60608152602001906001900390816131dc5790505b5090505f613215604080516002815233602082015230818301526060810190915290565b828281518110613227576132276155eb565b60200260200101819052505f5b8751811015613284578180600101925050878181518110613257576132576155eb565b6020026020010151838381518110613271576132716155eb565b6020908102919091010152600101613234565b50855115613416578080600101915050838282815181106132a7576132a76155eb565b60200260200101819052505f5b8651811015613414576133638782815181106132d2576132d26155eb565b60200260200101515f015161334061330e8a85815181106132f5576132f56155eb565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b898481518110613352576133526155eb565b602002602001015160400151613fcd565b61338357604051630a57f30960e31b815260048101829052602401610316565b868181518110613395576133956155eb565b60200260200101515f01516001600160a01b03165f1b8582815181106133bd576133bd6155eb565b60200260200101818152505081806001019250508681815181106133e3576133e36155eb565b602002602001015160200151838381518110613401576134016155eb565b60209081029190910101526001016132b4565b505b5095945050505050565b5f805f6130b78461403d565b5f805f805f61343b878761409c565b9250925092505f8061344d85856140df565b915091508183801561345c5750815b9650965050505050509250929050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166134c25783831516156134b6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661352a57838315161561351e573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f8085158415178015613553575f92505f9150613650565b61355d8487615dad565b91505f613569886141b7565b90505f613575876141b7565b90505f61358283836141e5565b5090505f6f0785ee10d5da46d900f436a0000000008211156135b7576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156135d857670de0b6b3a7640000820491506012015b633b9aca008211156135f157633b9aca00820491506009015b61271082111561360657612710820491506004015b811561361a57600a82049150600101613606565b6136248187615dad565b95506136468b8a613640878761363b87600a615eac565b614201565b896142cd565b9097509550505050505b5094509492505050565b5f805f61366785856140df565b9150915080158015613677575081155b1561369f57604051638eba4d0760e01b81526004810186905260248101859052604401610316565b509392505050565b5f806136b3848461436d565b90945092506136c486868686613c0e565b9150915094509492505050565b5f80835f036136fd57604051637a97930f60e01b81526004810187905260248101869052604401610316565b855f0361370e57505f905080611cec565b5f805f8061371c8a8a6143c2565b919b509950915061372d88886143c2565b919950975090505f61373e8b6141b7565b90505f61374a8a6141b7565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c81831015613b0f5784156137a157507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b9050604b613ae7565b6f4b3b4ca85a86c47a098a2240000000008310156138cd57678ac7230489e80000831015613831576402540be4008310156137ff57620186a08310156137ef5750620186a090506005613aa8565b506402540be4009050600a613aa8565b655af3107a400083101561381e5750655af3107a40009050600e613aa8565b50678ac7230489e8000090506013613aa8565b6b204fce5e3e250261100000008310156138835769152d02c7e14af680000083101561386c575069152d02c7e14af680000090506017613aa8565b506b204fce5e3e250261100000009050601c613aa8565b6d314dc6448d9338c15b0a000000008310156138b257506d314dc6448d9338c15b0a0000000090506021613aa8565b506f4b3b4ca85a86c47a098a22400000000090506026613aa8565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156139c55773af298d050e4395d69670b12b7f41000000000000831015613960577172cb5bd86321e38cb6ce6682e8000000000083101561394157507172cb5bd86321e38cb6ce6682e800000000009050602b613aa8565b5073af298d050e4395d69670b12b7f4100000000000090506030613aa8565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156139a1575076010b46c6cdd6e3e0828f4db456ff0c8ea000000000000090506035613aa8565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a613aa8565b7c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000831015613a5b577a026e4d30eccc3215dd8f3157d27e23acbdcfe68000000000000000831015613a3357507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f613aa8565b507c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000090506044613aa8565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000831015613aa857507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b818311613abd57600a820491505f1901613aa8565b815f03613ae7576040516305e51ecb60e01b8152600481018d9052602481018c9052604401610316565b85613b0f576040516305e51ecb60e01b8152600481018f9052602481018e9052604401610316565b80600160ff1b018d12613b2657808d039c50613b64565b600160ff1b9c90038c015f811315613b6457806001600160ff1b03038b13613b5157998a0199613b64565b5f80995099505050505050505050611cec565b5f808e128015613b7357505f8c135b15613b9457600160ff1b8e01808d13613b8c575f613b90565b808d035b9150505b8b818f01039750613bb18f8e613bab888789614201565b8b6142cd565b90995097505f811315613bfb57604c811315613bdb575f809a509a50505050505050505050611cec565b80600a0a8981613bed57613bed615d1b565b059850885f03613bfb575f97505b50969850949650611cec95505050505050565b5f8085158415178015613c3a57865f03613c2e5784849250925050611cec565b86869250925050611cec565b613c44878761461c565b9097509550613c53858561461c565b909550935085841315613c67579395929492935b838603604c811115613c80578787935093505050611cec565b80600a0a8681613c9257613c92615d1b565b0595505086850180881860ff90811c151589881890911c15168015613cfb57876001600160ff1b0303613ce25760405163d556b11160e01b8152600481018a905260248101899052604401610316565b600a968790059690980586019760019790970196613cff565b8198505b5096979596505050505050565b5f600882511015613d1e57505f919050565b506008015167ffffffffffffffff1667ff0a89c674ee78741490565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f80613d8e8460600151856040015161273190919063ffffffff16565b915083604001519050613dae836040015183611b4b90919063ffffffff16565b156131375782604001519150613dd18460600151836127ae90919063ffffffff16565b90509250929050565b5f80613de4614665565b60405163b7bad1b160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063b7bad1b19060240160408051808303815f875af1158015613e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e5e9190615eb7565b91509150915091565b5f805f851215613e9457604051634a7d166b60e01b81526004810186905260248101859052604401610316565b845f03613ea657505f90506001611bfd565b8460ff8416850185811215613ed85760405163d556b11160e01b81526004810188905260248101879052604401610316565b5f805f831215613f2457604c19831215613efb575f809550955050505050611bfd565b825f03600a0a9150818481613f1257613f12615d1b565b0495505084029091149150611bfd9050565b5f831315613fbd57604d831315613f615760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b82600a0a9150815f1981613f7757613f77615d1b565b04841115613fab5760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610316565b5091909102925060019150611bfd9050565b8360019550955050505050611bfd565b5f836001600160a01b03163b5f0361402b575f80613feb85856146f0565b5090925090505f81600381111561400457614004615d60565b1480156140225750856001600160a01b0316826001600160a01b0316145b925050506103bb565b614036848484614736565b90506103bb565b5f80614047614665565b604051630782d7e160e01b81526001600160a01b038416600482015273200e12d10bb0c5e4a17e7018f0f1161919bb938990630782d7e1906024016040805180830381865afa158015613e3a573d5f803e3d5ffd5b5f808060ff841681036001600160ff1b038611156140ce57600a860460018201600a88065f14935093509350506140d8565b8593509150600190505b9250925092565b5f601b83900b8314838382614143577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561412357620186a0860595506005850194505b8586601b0b1461413e57600a86059550846001019450614123565b614159565b855f0361415957505f9250600191506131379050565b848560030b1461419c575f85121561417957505f92508291506131379050565b60405163d556b11160e01b81526004810183905260248101829052604401610316565b50506001600160e01b03841660e084901b1791509250929050565b5f808212156141dc57600160ff1b82036141d65750600160ff1b919050565b505f0390565b5090565b919050565b5f805f1983850993909202808410938190039390930393915050565b5f805f61420e86866141e5565b91509150815f036142325783818161422857614228615d1b565b04925050506103bb565b8382106142635760405163362ced0960e11b8152600481018790526024810186905260448101859052606401610316565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614349576001600160ff1b03841115614336576142fa6001600160ff1b036001615592565b840361430e5750600160ff1b905081611cec565b614319600a85615d2f565b61432290615ef7565b61432d846001615dad565b91509150611cec565b61433f84615ef7565b8391509150611cec565b6001600160ff1b0384111561436357614322600a85615d2f565b5082905081611cec565b5f80600160ff1b84036143b8576001600160ff1b0383036143ab5760405163d556b11160e01b81526004810185905260248101849052604401610316565b600a840593508260010192505b50505f9190910391565b5f805f845f036143da57505f915081905060016140d8565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85055f036145c7576f4b3b4ca85a86c47a098a224000000000850515801561443c57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561445d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a0000000000000085051580156144a557507f80000000000000000000000000000000000000000000000000000000000000138412155b156144be57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561450a57507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614520576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561456f57507f80000000000000000000000000000000000000000000000000000000000000028412155b1561458557606485029450600284039350614520565b7546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b85051580156145b557506001600160ff1b018412155b156145c757600a850294506001840393505b600a808602908105861480156145e457506001600160ff1b018512155b156145f3578095506001850394505b50939492935050507546bf5bb0385045767e0f0ef2e7aa1e517e454637d1dd604b1b8305151590565b5f805f805f61462b87876143c2565b92509250925080614659576040516305e51ecb60e01b81526004810188905260248101879052604401610316565b50909590945092505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b15806146bc575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15612fd5576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610316565b5f805f8351604103614727576020840151604085015160608601515f1a61471988828585614787565b9550955095505050506140d8565b505081515f91506002906140d8565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156147c057505f91506003905082614845565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614811573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661483c57505f925060019150829050614845565b92505f91508190505b9450945094915050565b604051806080016040528061486261487b565b81526020015f81526020015f8152602001606081525090565b6040518060a001604052805f6001600160a01b031681526020016148c960405180606001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001606081525090565b8152606060208201819052604082018190525f91015290565b6040518060e001604052806148f561487b565b81526020015f81526020015f80191681526020015f8019168152602001606081526020015f8152602001606081525090565b5f60208284031215614937575f80fd5b81356001600160e01b0319811681146103bb575f80fd5b5f8083601f84011261495e575f80fd5b50813567ffffffffffffffff811115614975575f80fd5b6020830191508360208260051b8501011115613137575f80fd5b5f805f604084860312156149a1575f80fd5b833567ffffffffffffffff808211156149b8575f80fd5b9085019060a082880312156149cb575f80fd5b909350602085013590808211156149e0575f80fd5b506149ed8682870161494e565b9497909650939450505050565b5f60208284031215614a0a575f80fd5b5035919050565b6001600160a01b0381168114612eb5575f80fd5b80356141e081614a11565b5f805f805f60808688031215614a44575f80fd5b8535614a4f81614a11565b94506020860135935060408601359250606086013567ffffffffffffffff811115614a78575f80fd5b614a848882890161494e565b969995985093965092949392505050565b5f805f60608486031215614aa7575f80fd5b8335614ab281614a11565b92506020840135614ac281614a11565b929592945050506040919091013590565b5f805f805f60808688031215614ae7575f80fd5b8535614af281614a11565b94506020860135614b0281614a11565b935060408601359250606086013567ffffffffffffffff80821115614b25575f80fd5b818801915088601f830112614b38575f80fd5b813581811115614b46575f80fd5b896020828501011115614b57575f80fd5b9699959850939650602001949392505050565b5f60208284031215614b7a575f80fd5b81356103bb81614a11565b5f60c08284031215614b95575f80fd5b50919050565b5f60208284031215614bab575f80fd5b813567ffffffffffffffff811115614bc1575f80fd5b61052d84828501614b85565b5f805f60408486031215614bdf575f80fd5b833567ffffffffffffffff80821115614bf6575f80fd5b614c0287838801614b85565b945060208601359150808211156149e0575f80fd5b5f60208284031215614c27575f80fd5b813567ffffffffffffffff811115614c3d575f80fd5b8201608081850312156103bb575f80fd5b5f8060208385031215614c5f575f80fd5b823567ffffffffffffffff811115614c75575f80fd5b614c818582860161494e565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015614d1057603f19888603018452614cfe858351614c8d565b94509285019290850190600101614ce2565b5092979650505050505050565b5f8060408385031215614d2e575f80fd5b8235614d3981614a11565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405290565b6040805190810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b60405160a0810167ffffffffffffffff81118282101715614d7e57614d7e614d47565b604051601f8201601f1916810167ffffffffffffffff81118282101715614df357614df3614d47565b604052919050565b5f82601f830112614e0a575f80fd5b813567ffffffffffffffff811115614e2457614e24614d47565b614e37601f8201601f1916602001614dca565b818152846020838601011115614e4b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215614e77575f80fd5b614e7f614d5b565b90508135614e8c81614a11565b81526020820135614e9c81614a11565b6020820152604082013567ffffffffffffffff811115614eba575f80fd5b614ec684828501614dfb565b60408301525092915050565b5f67ffffffffffffffff821115614eeb57614eeb614d47565b5060051b60200190565b5f60408284031215614f05575f80fd5b614f0d614d84565b90508135614f1a81614a11565b808252506020820135602082015292915050565b5f82601f830112614f3d575f80fd5b81356020614f52614f4d83614ed2565b614dca565b8083825260208201915060208460061b870101935086841115614f73575f80fd5b602086015b84811015614f9857614f8a8882614ef5565b835291830191604001614f78565b509695505050505050565b5f60a08284031215614fb3575f80fd5b614fbb614da7565b9050614fc682614a25565b8152602082013567ffffffffffffffff80821115614fe2575f80fd5b614fee85838601614e67565b60208401526040840135915080821115615006575f80fd5b61501285838601614f2e565b6040840152606084013591508082111561502a575f80fd5b5061503784828501614f2e565b6060830152506080820135608082015292915050565b5f61505a614f4d84614ed2565b8381529050602080820190600585811b850187811115615078575f80fd5b855b8181101561516557803567ffffffffffffffff80821115615099575f80fd5b908801906060828c0312156150ac575f80fd5b6150b4614d5b565b82356150bf81614a11565b815282870135828111156150d1575f80fd5b8301601f81018d136150e1575f80fd5b80356150ef614f4d82614ed2565b81815290881b8201890190898101908f83111561510a575f80fd5b928a01925b828410156151285783358252928a0192908a019061510f565b848b01525060409150508381013583811115615142575f80fd5b61514e8e828701614dfb565b91830191909152508752505093830193830161507a565b50505050509392505050565b5f82601f830112615180575f80fd5b6103bb8383356020850161504d565b5f805f805f61014086880312156151a4575f80fd5b853567ffffffffffffffff808211156151bb575f80fd5b6151c789838a01614fa3565b965060208801359150808211156151dc575f80fd5b6151e889838a01614fa3565b95506151f78960408a01614b85565b945061010088013591508082111561520d575f80fd5b61521989838a01615171565b935061012088013591508082111561522f575f80fd5b5061523c88828901615171565b9150509295509295909350565b5f6102b43683614fa3565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f813561528881614a11565b6001600160a01b0390811684526020830135906152a482614a11565b166020840152604082013536839003601e190181126152c1575f80fd5b820160208101903567ffffffffffffffff8111156152dd575f80fd5b8036038213156152eb575f80fd5b60606040860152615300606086018284615254565b95945050505050565b5f808335601e1984360301811261531e575f80fd5b830160208101925035905067ffffffffffffffff81111561533d575f80fd5b8060061b3603821315613137575f80fd5b8183525f60208085019450825f5b8581101561539457813561536f81614a11565b6001600160a01b0316875281830135838801526040968701969091019060010161535c565b509495945050505050565b5f6001600160a01b0380861683528460208401526060604084015283356153c581614a11565b166060830152602083013536849003605e190181126153e2575f80fd5b60a060808401526153f9610100840185830161527c565b90506154086040850185615309565b605f19808685030160a087015261542084838561534e565b935061542f6060880188615309565b93509150808685030160c08701525061544983838361534e565b92505050608084013560e084015280915050949350505050565b5f615470614f4d84614ed2565b80848252602080830192508560051b85013681111561548d575f80fd5b855b8181101561551757803567ffffffffffffffff808211156154ae575f80fd5b8189019150604082360312156154c2575f80fd5b6154ca614d84565b8235828111156154d8575f80fd5b6154e436828601614e67565b82525085830135828111156154f7575f80fd5b61550336828601615171565b82880152508752505093820193820161548f565b50919695505050505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015260a0608083015261555b60a083018486615254565b98975050505050505050565b5f60208284031215615577575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102b4576102b461557e565b5f808335601e198436030181126155ba575f80fd5b83018035915067ffffffffffffffff8211156155d4575f80fd5b6020019150600581901b3603821315613137575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112615613575f80fd5b9190910192915050565b5f8235609e19833603018112615613575f80fd5b5f808335601e19843603018112615646575f80fd5b83018035915067ffffffffffffffff821115615660575f80fd5b6020019150600681901b3603821315613137575f80fd5b5f60808236031215615687575f80fd5b6040516080810167ffffffffffffffff82821081831117156156ab576156ab614d47565b8160405284359150808211156156bf575f80fd5b6156cb36838701614fa3565b8352602085013560208401526040850135604084015260608501359150808211156156f4575f80fd5b5061570136828601615171565b60608301525092915050565b5f6020828403121561571d575f80fd5b813580151581146103bb575f80fd5b5f815180845260208085019450602084015f5b8381101561539457815180516001600160a01b03168852830151838801526040909601959082019060010161573f565b5f6001600160a01b03808351168452602083015160a060208601528181511660a08601528160208201511660c08601526040810151915050606060e08501526157bc610100850182614c8d565b9050604083015184820360408601526157d5828261572c565b915050606083015184820360608601526157ef828261572c565b915050608083015160808501528091505092915050565b5f815180845260208085019450602084015f5b8381101561539457815187529582019590820190600101615819565b5f6001600160a01b0380871683526020608081850152865160808086015261586161010086018261576f565b90508188015160a086015260408089015160c08701526060808a0151607f198885030160e08901528381518086528686019150868160051b87010187840193505f5b828110156158fd57601f1988830301845284518a815116835289810151878b8501526158d188850182615806565b91890151848303858b01529190506158e98183614c8d565b968b0196958b0195935050506001016158a3565b5080995050505050505050505083604083015282606083015295945050505050565b5f808335601e19843603018112615934575f80fd5b83018035915067ffffffffffffffff82111561594e575f80fd5b602001915036819003821315613137575f80fd5b5f8235605e19833603018112615613575f80fd5b5f6102b43683614e67565b5f60408284031215615991575f80fd5b6103bb8383614ef5565b6001600160a01b0384168152826020820152606060408201525f615300606083018461576f565b6001600160a01b0385168152836020820152606060408201525f6159ea606083018486615254565b9695505050505050565b5f6103bb36848461504d565b818103818111156102b4576102b461557e565b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f6101206001600160a01b0387168352806020840152615a588184018761576f565b90508281036040840152615a6c818661576f565b9150508235606083015260208301356080830152604083013560a0830152606083013560c0830152608083013560e083015260a083013561010083015295945050505050565b602081525f6103bb602083018461576f565b5f60018201615ad557615ad561557e565b5060010190565b5f8282518085526020808601955060208260051b840101602086015f5b84811015615b2757601f19868403018952615b15838351615806565b98840198925090830190600101615af9565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e06060840152615b6d610100840182614c8d565b9050606084015160808401526080840151601f19808584030160a0860152615b958383615adc565b925060a08601519150808584030160c0860152615bb28383615806565b925060c08601519150808584030160e0860152506153008282615806565b5f82601f830112615bdf575f80fd5b81516020615bef614f4d83614ed2565b8083825260208201915060208460051b870101935086841115615c10575f80fd5b602086015b84811015614f985780518352918301918301615c15565b5f8060408385031215615c3d575f80fd5b825167ffffffffffffffff80821115615c54575f80fd5b818501915085601f830112615c67575f80fd5b81516020615c77614f4d83614ed2565b82815260059290921b84018101918181019089841115615c95575f80fd5b948201945b83861015615cb357855182529482019490820190615c9a565b91880151919650909350505080821115615ccb575f80fd5b50615cd885828601615bd0565b9150509250929050565b828152604060208201525f61052d6040830184615806565b6001600160a01b0383168152604060208201525f61052d6040830184615adc565b634e487b7160e01b5f52601260045260245ffd5b5f82615d4957634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6103bb6020830184614c8d565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03831681526040810160048310615da057634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b8082018281125f8312801582168215821617156114ad576114ad61557e565b600181815b80851115615e0657815f1904821115615dec57615dec61557e565b80851615615df957918102915b93841c9390800290615dd1565b509250929050565b5f82615e1c575060016102b4565b81615e2857505f6102b4565b8160018114615e3e5760028114615e4857615e64565b60019150506102b4565b60ff841115615e5957615e5961557e565b50506001821b6102b4565b5060208310610133831016604e8410600b8410161715615e87575081810a6102b4565b615e918383615dcc565b805f1904821115615ea457615ea461557e565b029392505050565b5f6103bb8383615e0e565b5f8060408385031215615ec8575f80fd5b825160048110615ed6575f80fd5b602084015190925060ff81168114615eec575f80fd5b809150509250929050565b5f600160ff1b82016141d6576141d661557e56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"; diff --git a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol index 35d4a685ee..0770cc5a62 100644 --- a/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol +++ b/src/generated/RouteProcessorRaindexV6ArbOrderTaker.pointers.sol @@ -10,12 +10,12 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x14f012211cd8e3e0f07777b5e93f1f441a80bbeb8845b762913d7b9362ba71f6); +bytes32 constant BYTECODE_HASH = bytes32(0x9a0d64fd312dc16761f28a7e13e48a8e8ad2f0ba5995c16710514e7524f43ee2); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xA24Db2268976817aed62186AD7EF6084a66683C8); +address constant DEPLOYED_ADDRESS = address(0x1350420cbf3E9eb8F1734bbe466e0F303579eE24); /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b038316731115ebc9c82f074454f6ac28f123b0684a453af7146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; + hex"608060405260043610610034575f3560e01c806301ffc9a71461003d578063691f9ed714610070578063b17c83c11461008f57005b3661003b57005b005b348015610048575f80fd5b5061005c610057366004611458565b6100a2565b604051901515815260200160405180910390f35b34801561007b575f80fd5b5061003b61008a366004611493565b6100f3565b61003b61009d366004611535565b610200565b5f6001600160e01b0319821663691f9ed760e01b14806100d257506001600160e01b0319821663b17c83c160e01b145b806100ed57506301ffc9a760e01b6001600160e01b03198316145b92915050565b736e2d0e71d900474b262e545bc4c98b71ab368d2161011d6001600160a01b038816825f196104c2565b5f61012a838501856116b0565b90505f61013f8761013a8b61053c565b6105c0565b5090505f806101518861013a8c61053c565b91509150806101685781610164816116ea565b9250505b604051632646478b60e01b81526001600160a01b03861690632646478b9061019e908e9087908f90889030908c9060040161173c565b6020604051808303815f875af11580156101ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190611787565b506101f36001600160a01b038c16865f6104c2565b5050505050505050505050565b610208610602565b6102176102148261190a565b50565b61022460808301836119c6565b90505f0361024557604051639c95219f60e01b815260040160405180910390fd5b6001600160a01b0383167337fc0efec37d19f8a221aa4f8f7600c9ba2acd20146102925760405163516e822d60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b5f6102a060808401846119c6565b5f8181106102b0576102b0611a0c565b90506020028101906102c29190611a20565b6102cc9080611a3e565b6102da906040810190611a52565b6102e760808601866119c6565b5f8181106102f7576102f7611a0c565b90506020028101906103099190611a20565b6020013581811061031c5761031c611a0c565b6103329260206040909202019081019150611a98565b90505f61034260808501856119c6565b5f81811061035257610352611a0c565b90506020028101906103649190611a20565b61036e9080611a3e565b61037c906060810190611a52565b61038960808701876119c6565b5f81811061039957610399611a0c565b90506020028101906103ab9190611a20565b604001358181106103be576103be611a0c565b6103d49260206040909202019081019150611a98565b90506103eb6001600160a01b038316865f196104c2565b6040516334e3942b60e11b81526001600160a01b038616906369c7285690610417908790600401611cfc565b60408051808303815f875af1158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190611efc565b5061046d90506001600160a01b038316865f6104c2565b6104926104798461190a565b836104838561053c565b8461048d8661053c565b610630565b50506104bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b6104ce8383835f6108cf565b6104bd576104df83835f60016108cf565b61050757604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b61051483838360016108cf565b6104bd57604051635274afe760e01b81526001600160a01b0384166004820152602401610289565b5f610545610931565b6040516354636d2b60e01b81526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af115801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed9190611f1e565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6105f48282876109be565b9350935050505b9250929050565b61060a610b27565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610646575050604080516003808252608082019092529192505f919060208201606080368337019050506040516370a0823160e01b81523060048201529091505f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156106c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e99190611787565b90508015610705576107056001600160a01b0388163383610b69565b5f6107108288610b76565b50905080835f8151811061072657610726611a0c565b602090810291909101015250506040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190611787565b905080156107b7576107b76001600160a01b0386163383610b69565b5f6107c28286610b76565b50905080836001815181106107d9576107d9611a0c565b60209081029190910101525047905080156107f8576107f83382610bb6565b5f610804826012610b76565b509050808360028151811061081b5761081b611a0c565b602002602001018181525050505080825f8151811061083c5761083c611a0c565b60209081029190910101526040805160018082528183019092525f91816020015b6040805160a0810182525f918101828152606080830193909352608082018390528152602081019190915281526020019060019003908161085d57905050905087815f815181106108b0576108b0611a0c565b60200260200101819052506108c58382610c2d565b5050505050505050565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580610988575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b156109bc576040516373e6d7b360e01b815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610289565b565b5f805f8512156109eb57604051634a7d166b60e01b81526004810186905260248101859052604401610289565b845f036109fd57505f90506001610b1f565b8460ff8416850185811215610a2f5760405163d556b11160e01b81526004810188905260248101879052604401610289565b5f805f831215610a7b57604c19831215610a52575f809550955050505050610b1f565b825f03600a0a9150818481610a6957610a69611f3e565b0495505084029091149150610b1f9050565b5f831315610b1457604d831315610ab85760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b82600a0a9150815f1981610ace57610ace611f3e565b04841115610b025760405163c849483b60e01b8152600481018a90526024810189905260ff88166044820152606401610289565b5091909102925060019150610b1f9050565b509193506001925050505b935093915050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036109bc57604051633ee5aeb560e01b815260040160405180910390fd5b6105148383836001610df1565b5f805f805f610b858787610e3b565b9250925092505f80610b978585610e97565b9150915081838015610ba65750815b9650965050505050509250929050565b80471015610be05760405163cf47918160e01b815247600482015260248101829052604401610289565b610bf9828260405180602001604052805f815250610f84565b15610c02575050565b3d15610c1457610c10610f99565b5050565b60405163d6bda27560e01b815260040160405180910390fd5b335f8181523060209081526040808320815160a0810183528083018581526060808301879052608083018190529082528185015282518581529384018581528484019093529093909291905b86518110156108c557868181518110610c9457610c94611a0c565b602002602001015193505f845f015160400151511115610de9575f845f01515f01516001600160a01b031663d04dfe236040518060e00160405280885f0151602001516001600160a01b03168152602001898152602001885f01516040015181526020015f8152602001610d0c8d8a60200151610fa4565b8152602001878152602001868152506040518263ffffffff1660e01b8152600401610d379190611fd9565b5f60405180830381865afa158015610d51573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7891908101906120da565b9150505f81511115610de75784516020015160405163012c676d60e21b81526001600160a01b03909116906304b19db490610db9908a908590600401612190565b5f604051808303815f87803b158015610dd0575f80fd5b505af1158015610de2573d5f803e3d5ffd5b505050505b505b600101610c79565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316610925578383151615610919573d5f823e3d81fd5b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115610e8657600a860460018201600a88065f1493509350935050610e90565b8593509150600190505b9250925092565b5f601b83900b8314838382610efb577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515610edb57620186a0860595506005850194505b8586601b0b14610ef657600a86059550846001019450610edb565b610f11565b855f03610f1157505f9250600191506105fb9050565b848560030b14610f54575f851215610f3157505f92508291506105fb9050565b60405163d556b11160e01b81526004810183905260248101829052604401610289565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b60605f825167ffffffffffffffff811115610fc157610fc16115b3565b604051908082528060200260200182016040528015610fea578160200160208202803683370190505b5090505f80845111610ffc575f611002565b83516001015b85516001010190505f8167ffffffffffffffff811115611024576110246115b3565b60405190808252806020026020018201604052801561105757816020015b60608152602001906001900390816110425790505b5090505f61107b604080516002815233602082015230818301526060810190915290565b82828151811061108d5761108d611a0c565b60200260200101819052505f5b87518110156110ea5781806001019250508781815181106110bd576110bd611a0c565b60200260200101518383815181106110d7576110d7611a0c565b602090810291909101015260010161109a565b5085511561127c5780806001019150508382828151811061110d5761110d611a0c565b60200260200101819052505f5b865181101561127a576111c987828151811061113857611138611a0c565b60200260200101515f01516111a66111748a858151811061115b5761115b611a0c565b6020026020010151602001518051602090810291012090565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b8984815181106111b8576111b8611a0c565b602002602001015160400151611286565b6111e957604051630a57f30960e31b815260048101829052602401610289565b8681815181106111fb576111fb611a0c565b60200260200101515f01516001600160a01b03165f1b85828151811061122357611223611a0c565b602002602001018181525050818060010192505086818151811061124957611249611a0c565b60200260200101516020015183838151811061126757611267611a0c565b602090810291909101015260010161111a565b505b5095945050505050565b5f836001600160a01b03163b5f036112e4575f806112a485856112f9565b5090925090505f8160038111156112bd576112bd6121a8565b1480156112db5750856001600160a01b0316826001600160a01b0316145b925050506112f2565b6112ef84848461133f565b90505b9392505050565b5f805f8351604103611330576020840151604085015160608601515f1a61132288828585611390565b955095509550505050610e90565b505081515f9150600290610e90565b805160408051630b135d3f60e11b8082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113c957505f9150600390508261144e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561141a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661144557505f92506001915082905061144e565b92505f91508190505b9450945094915050565b5f60208284031215611468575f80fd5b81356001600160e01b0319811681146112f2575f80fd5b6001600160a01b0381168114610214575f80fd5b5f805f805f8060a087890312156114a8575f80fd5b86356114b38161147f565b955060208701356114c38161147f565b94506040870135935060608701359250608087013567ffffffffffffffff808211156114ed575f80fd5b818901915089601f830112611500575f80fd5b81358181111561150e575f80fd5b8a602082850101111561151f575f80fd5b6020830194508093505050509295509295509295565b5f805f60608486031215611547575f80fd5b83356115528161147f565b9250602084013567ffffffffffffffff8082111561156e575f80fd5b9085019060c08288031215611581575f80fd5b90925060408501359080821115611596575f80fd5b508401604081870312156115a8575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156115ea576115ea6115b3565b60405290565b6040805190810167ffffffffffffffff811182821017156115ea576115ea6115b3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561163c5761163c6115b3565b604052919050565b5f82601f830112611653575f80fd5b813567ffffffffffffffff81111561166d5761166d6115b3565b611680601f8201601f1916602001611613565b818152846020838601011115611694575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156116c0575f80fd5b813567ffffffffffffffff8111156116d6575f80fd5b6116e284828501611644565b949350505050565b5f6001820161170757634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038089168352876020840152808716604084015285606084015280851660808401525060c060a083015261177b60c083018461170e565b98975050505050505050565b5f60208284031215611797575f80fd5b5051919050565b5f67ffffffffffffffff8211156117b7576117b76115b3565b5060051b60200190565b5f82601f8301126117d0575f80fd5b813560206117e56117e08361179e565b611613565b82815260059290921b84018101918181019086841115611803575f80fd5b8286015b848110156118ff57803567ffffffffffffffff80821115611826575f80fd5b908801906060828b03601f1901121561183d575f80fd5b6118456115c7565b868301356118528161147f565b815260408381013583811115611866575f80fd5b8401603f81018d13611876575f80fd5b888101356118866117e08261179e565b81815260059190911b82018301908a8101908f8311156118a4575f80fd5b928401925b828410156118c25783358252928b0192908b01906118a9565b858c01525050506060840135838111156118da575f80fd5b6118e88d8a83880101611644565b918301919091525085525050918301918301611807565b509695505050505050565b5f6040823603121561191a575f80fd5b6119226115f0565b823567ffffffffffffffff80821115611939575f80fd5b81850191506060823603121561194d575f80fd5b6119556115c7565b82356119608161147f565b815260208301356119708161147f565b6020820152604083013582811115611986575f80fd5b61199236828601611644565b604083015250835260208501359150808211156119ad575f80fd5b506119ba368286016117c1565b60208301525092915050565b5f808335601e198436030181126119db575f80fd5b83018035915067ffffffffffffffff8211156119f5575f80fd5b6020019150600581901b36038213156105fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112611a34575f80fd5b9190910192915050565b5f8235609e19833603018112611a34575f80fd5b5f808335601e19843603018112611a67575f80fd5b83018035915067ffffffffffffffff821115611a81575f80fd5b6020019150600681901b36038213156105fb575f80fd5b5f60208284031215611aa8575f80fd5b81356112f28161147f565b5f808335601e19843603018112611ac8575f80fd5b830160208101925035905067ffffffffffffffff811115611ae7575f80fd5b8060051b36038213156105fb575f80fd5b5f8235605e19833603018112611b0c575f80fd5b90910192915050565b5f808335601e19843603018112611b2a575f80fd5b830160208101925035905067ffffffffffffffff811115611b49575f80fd5b8036038213156105fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112611b94575f80fd5b830160208101925035905067ffffffffffffffff811115611bb3575f80fd5b8060061b36038213156105fb575f80fd5b8183525f60208085019450825f5b85811015611c0a578135611be58161147f565b6001600160a01b03168752818301358388015260409687019690910190600101611bd2565b509495945050505050565b8183526020808401935f91600585811b8301820185855b88811015611cee57858303601f19018a52611c478289611af8565b60608135611c548161147f565b6001600160a01b03168552611c6b82880183611ab3565b82898801528083880152608092507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115611ca5575f80fd5b871b808288850137860190506040611cbf84820185611b15565b9450838884030182890152611cd78484018683611b57565b9e8a019e9750505093870193505050600101611c2c565b509098975050505050505050565b5f602080835260e08301843582850152604082860135818601526060818701358187015280870135801515808214611d32575f80fd5b8060808901525050611d476080880188611ab3565b60c060a08901529384905261010093848801600582901b89018601835f5b84811015611ec3578b830360ff19018452813536879003607e19018112611d8a575f80fd5b8601803536829003609e19018112611da0575f80fd5b6080855281018035611db18161147f565b6001600160a01b038082166080880152611dcd8e840184611af8565b915060a0808801528135611de08161147f565b8116610120880152818e0135611df58161147f565b16610140870152611e08818c0182611b15565b91508a610160880152611e2061018088018383611b57565b915050611e2f8b830183611b7f565b607f19808985030160c08a0152611e47848385611bc4565b9350611e558d860186611b7f565b93509150808985030160e08a015250611e6f838383611bc4565b9250505060808201358c8701528c8301358d8701528a8301358b870152611e988a840184611ab3565b935091508581038a870152611eae818484611c15565b968d019695505050918a019150600101611d65565b5050611ed260a08c018c611b15565b8b8303601f190160c08d015298509650611eed818989611b57565b9b9a5050505050505050505050565b5f8060408385031215611f0d575f80fd5b505080516020909101519092909150565b5f60208284031215611f2e575f80fd5b815160ff811681146112f2575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f815180845260208085019450602084015f5b83811015611c0a57815187529582019590820190600101611f65565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611fcc57601f19868403018952611fba838351611f52565b98840198925090830190600101611f9e565b5090979650505050505050565b602081526001600160a01b038251166020820152602082015160408201525f604083015160e0606084015261201261010084018261170e565b9050606084015160808401526080840151601f19808584030160a086015261203a8383611f81565b925060a08601519150808584030160c08601526120578383611f52565b925060c08601519150808584030160e0860152506120758282611f52565b95945050505050565b5f82601f83011261208d575f80fd5b8151602061209d6117e08361179e565b8083825260208201915060208460051b8701019350868411156120be575f80fd5b602086015b848110156118ff57805183529183019183016120c3565b5f80604083850312156120eb575f80fd5b825167ffffffffffffffff80821115612102575f80fd5b818501915085601f830112612115575f80fd5b815160206121256117e08361179e565b82815260059290921b84018101918181019089841115612143575f80fd5b948201945b8386101561216157855182529482019490820190612148565b91880151919650909350505080821115612179575f80fd5b506121868582860161207e565b9150509250929050565b828152604060208201525f6116e26040830184611f52565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/lib/deploy/LibRaindexDeploy.sol b/src/lib/deploy/LibRaindexDeploy.sol index 11aff77069..b37c8c7975 100644 --- a/src/lib/deploy/LibRaindexDeploy.sol +++ b/src/lib/deploy/LibRaindexDeploy.sol @@ -142,6 +142,16 @@ library LibRaindexDeploy { bytes32 constant RAINDEX_DEPLOYED_CODEHASH_0_1_11 = 0xb9aa0944893a2aa695250428cee0d2e839f3794aebbc229e2070f064598c4b31; + /// The deployed address of the `RaindexV6` contract at the published `0.1.12` + /// tag. (Changed in 0.1.12 — clear3 NegativeBounty guard hoisted ahead of any + /// vault settlement.) + address constant RAINDEX_DEPLOYED_ADDRESS_0_1_12 = 0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20; + + /// The runtime code hash of the `RaindexV6` contract at the published `0.1.12` + /// tag. + bytes32 constant RAINDEX_DEPLOYED_CODEHASH_0_1_12 = + 0x6dccd7018126439bb9bceec4cd37f5bcfdd5319979fbf70f9faf41450da10b6f; + /// The address of the `RaindexV6SubParser` contract when deployed with /// the rain standard zoltu deployer. address constant SUB_PARSER_DEPLOYED_ADDRESS = SUB_PARSER_ADDR; @@ -249,6 +259,15 @@ library LibRaindexDeploy { bytes32 constant SUB_PARSER_DEPLOYED_CODEHASH_0_1_11 = 0x704aadc1ed56f63ff918ab219e6681a5d2851d774e2ee136bbe7904ea3b2fdcd; + /// The deployed address of the `RaindexV6SubParser` contract at the published + /// `0.1.12` tag. (Unchanged since 0.1.11.) + address constant SUB_PARSER_DEPLOYED_ADDRESS_0_1_12 = 0x09Bc7AF266012F44fb41D8Bd682da931666605e1; + + /// The runtime code hash of the `RaindexV6SubParser` contract at the + /// published `0.1.12` tag. + bytes32 constant SUB_PARSER_DEPLOYED_CODEHASH_0_1_12 = + 0x704aadc1ed56f63ff918ab219e6681a5d2851d774e2ee136bbe7904ea3b2fdcd; + /// The address of the `RouteProcessor4` contract when deployed with the /// rain standard zoltu deployer. address constant ROUTE_PROCESSOR_DEPLOYED_ADDRESS = ROUTE_PROCESSOR_ADDR; @@ -356,6 +375,15 @@ library LibRaindexDeploy { bytes32 constant ROUTE_PROCESSOR_DEPLOYED_CODEHASH_0_1_11 = 0xeb3745a79c6ba48e8767b9c355b8e7b79f9d6edeca004e4bb91be4de515a7eeb; + /// The deployed address of the `RouteProcessor4` contract at the published + /// `0.1.12` tag. (Unchanged since 0.1.11.) + address constant ROUTE_PROCESSOR_DEPLOYED_ADDRESS_0_1_12 = 0x6E2d0e71d900474b262E545Bc4C98b71ab368d21; + + /// The runtime code hash of the `RouteProcessor4` contract at the published + /// `0.1.12` tag. + bytes32 constant ROUTE_PROCESSOR_DEPLOYED_CODEHASH_0_1_12 = + 0xeb3745a79c6ba48e8767b9c355b8e7b79f9d6edeca004e4bb91be4de515a7eeb; + /// The address of the `GenericPoolRaindexV6ArbOrderTaker` contract when /// deployed with the rain standard zoltu deployer. address constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_ADDRESS = GENERIC_POOL_ARB_OT_ADDR; @@ -468,6 +496,16 @@ library LibRaindexDeploy { bytes32 constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_11 = 0x04b0da6d34aaa9b7df623ea46c7849a9e13bcff32dbb02e781b94acaab02bacf; + /// The deployed address of the `GenericPoolRaindexV6ArbOrderTaker` contract + /// at the published `0.1.12` tag. (Changed in 0.1.12 — embeds the redeployed + /// RaindexV6.) + address constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_ADDRESS_0_1_12 = 0xE84c106B0A89A164d2D65205B9EBAE37c15Fd84a; + + /// The runtime code hash of the `GenericPoolRaindexV6ArbOrderTaker` contract + /// at the published `0.1.12` tag. + bytes32 constant GENERIC_POOL_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_12 = + 0x02b17ab238a36ebcedee19fa5a374d6122865be8fff61bf45ad15822c8482030; + /// The address of the `RouteProcessorRaindexV6ArbOrderTaker` contract /// when deployed with the rain standard zoltu deployer. address constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_ADDRESS = RP_ARB_OT_ADDR; @@ -591,6 +629,17 @@ library LibRaindexDeploy { bytes32 constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_11 = 0x14f012211cd8e3e0f07777b5e93f1f441a80bbeb8845b762913d7b9362ba71f6; + /// The deployed address of the `RouteProcessorRaindexV6ArbOrderTaker` + /// contract at the published `0.1.12` tag. (Changed in 0.1.12 — embeds the + /// redeployed RaindexV6.) + address constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_ADDRESS_0_1_12 = + 0x1350420cbf3E9eb8F1734bbe466e0F303579eE24; + + /// The runtime code hash of the `RouteProcessorRaindexV6ArbOrderTaker` + /// contract at the published `0.1.12` tag. + bytes32 constant ROUTE_PROCESSOR_ARB_ORDER_TAKER_DEPLOYED_CODEHASH_0_1_12 = + 0x9a0d64fd312dc16761f28a7e13e48a8e8ad2f0ba5995c16710514e7524f43ee2; + /// The address of the `GenericPoolRaindexV6FlashBorrower` contract when /// deployed with the rain standard zoltu deployer. address constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_ADDRESS = GENERIC_POOL_FB_ADDR; @@ -703,8 +752,18 @@ library LibRaindexDeploy { bytes32 constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_CODEHASH_0_1_11 = 0x09617589f55317f6e41e1a1fba10d0d77996af310e5ce4d2705249fcaf3cb029; - uint256 constant RAINDEX_START_BLOCK_ARBITRUM = 473877912; - uint256 constant RAINDEX_START_BLOCK_BASE = 47384882; - uint256 constant RAINDEX_START_BLOCK_FLARE = 63007250; - uint256 constant RAINDEX_START_BLOCK_POLYGON = 88569424; + /// The deployed address of the `GenericPoolRaindexV6FlashBorrower` contract + /// at the published `0.1.12` tag. (Changed in 0.1.12 — embeds the redeployed + /// RaindexV6.) + address constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_ADDRESS_0_1_12 = 0x032d9D94A79909F3b337ECFE6f73f4e86bA79c7E; + + /// The runtime code hash of the `GenericPoolRaindexV6FlashBorrower` contract + /// at the published `0.1.12` tag. + bytes32 constant GENERIC_POOL_FLASH_BORROWER_DEPLOYED_CODEHASH_0_1_12 = + 0x03cde49152f7b5e29826ea8c561481b747b86be1f5cb4136fa064be6e4ac1c0d; + + uint256 constant RAINDEX_START_BLOCK_ARBITRUM = 473899359; + uint256 constant RAINDEX_START_BLOCK_BASE = 47387582; + uint256 constant RAINDEX_START_BLOCK_FLARE = 63011168; + uint256 constant RAINDEX_START_BLOCK_POLYGON = 88573024; } diff --git a/subgraph/networks.json b/subgraph/networks.json index b88b243c85..51553a6bcc 100644 --- a/subgraph/networks.json +++ b/subgraph/networks.json @@ -1,26 +1,26 @@ { "arbitrum-one": { "Raindex": { - "address": "0x1115EBC9C82F074454F6AC28f123B0684A453aF7", - "startBlock": 473877912 + "address": "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20", + "startBlock": 473899359 } }, "matic": { "Raindex": { - "address": "0x1115EBC9C82F074454F6AC28f123B0684A453aF7", - "startBlock": 88569424 + "address": "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20", + "startBlock": 88573024 } }, "base": { "Raindex": { - "address": "0x1115EBC9C82F074454F6AC28f123B0684A453aF7", - "startBlock": 47384882 + "address": "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20", + "startBlock": 47387582 } }, "flare": { "Raindex": { - "address": "0x1115EBC9C82F074454F6AC28f123B0684A453aF7", - "startBlock": 63007250 + "address": "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20", + "startBlock": 63011168 } } } diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index f2b26cd257..bf693a6366 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -6,7 +6,7 @@ dataSources: name: Raindex network: sepolia source: - address: "0x1115EBC9C82F074454F6AC28f123B0684A453aF7" + address: "0x37FC0EFec37D19f8A221aa4F8F7600C9ba2AcD20" abi: Raindex startBlock: 0 mapping: diff --git a/test/concrete/raindex/RaindexV6.takeOrder.vaultZeroInput.t.sol b/test/concrete/raindex/RaindexV6.takeOrder.vaultZeroInput.t.sol index 39bc13d6ac..b36babf64d 100644 --- a/test/concrete/raindex/RaindexV6.takeOrder.vaultZeroInput.t.sol +++ b/test/concrete/raindex/RaindexV6.takeOrder.vaultZeroInput.t.sol @@ -17,6 +17,7 @@ import { TaskV2 } from "raindex-interface-0.1.1/src/interface/IRaindexV6.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {NegativeBounty} from "../../../src/concrete/raindex/RaindexV6.sol"; /// @title RaindexV6TakeOrderVaultZeroInputTest /// @notice An order with a `vaultId == 0` INPUT is settled as a direct wallet @@ -673,4 +674,43 @@ contract RaindexV6TakeOrderVaultZeroInputTest is RaindexV6ExternalRealTest { vm.expectRevert(); iRaindex.vaultBalance2(owner, address(token0), bytes32(0)); } + + /// A `clear3` whose orders cross into a negative bounty reverts with the + /// explicit `NegativeBounty` before any vault is settled. Both orders take + /// and give via vault 0 against an orderbook with zero ambient balance, so + /// the only funds that could settle a vault-0 input are the capped outputs + /// pulled from the counterparty. The negative-bounty guard runs ahead of that + /// settlement, so the explicit error is the revert rather than the vault-0 + /// token push running short first. + /// + /// Alice: gives token0, wants token1 @ IO ratio 2 (both vault 0) + /// Bob: gives token1, wants token0 @ IO ratio 2 (both vault 0) + /// + /// Each order's input demand (1 * 2 = 2) caps to the counterparty's max + /// output (1): each output is 0.5 and each input is 1, so both bounties are + /// 0.5 - 1 = -0.5. + function testClearNegativeBountyVaultZeroRevertsNegativeBounty() external { + token0.mint(alice, 10e18); + vm.prank(alice); + token0.approve(address(iRaindex), 10e18); + + token1.mint(bob, 10e18); + vm.prank(bob); + token1.approve(address(iRaindex), 10e18); + + OrderV4 memory aliceOrder = LibTestTakeOrder.addOrderWithExpression( + vm, alice, "_ _: 1 2;:;", address(token1), bytes32(0), address(token0), bytes32(0) + ); + OrderV4 memory bobOrder = LibTestTakeOrder.addOrderWithExpression( + vm, bob, "_ _: 1 2;:;", address(token0), bytes32(0), address(token1), bytes32(0) + ); + + assertEq(token0.balanceOf(address(iRaindex)), 0, "orderbook starts with zero ambient token0"); + assertEq(token1.balanceOf(address(iRaindex)), 0, "orderbook starts with zero ambient token1"); + + vm.expectRevert(NegativeBounty.selector); + iRaindex.clear3( + aliceOrder, bobOrder, ClearConfigV2(0, 0, 0, 0, 0, 0), new SignedContextV1[](0), new SignedContextV1[](0) + ); + } }