1 tx
3 calls
constructor
constructor(address kycRegistry_, address poolRegistry_, address depositTokenRegistry_, address sharePriceCalculatorFactory_, address collateralManagerFactory_)
functions
COLLATERAL_MANAGER_FACTORY
viewfunction COLLATERAL_MANAGER_FACTORY() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEPLOYER_ROLE
viewfunction DEPLOYER_ROLE() view returns (bytes32)
DEPOSIT_TOKEN_REGISTRY
viewfunction DEPOSIT_TOKEN_REGISTRY() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
ICL_IMPLEMENTATION
viewfunction ICL_IMPLEMENTATION() view returns (address)
KYC_REGISTRY
viewfunction KYC_REGISTRY() view returns (address)
POOL_REGISTRY
viewfunction POOL_REGISTRY() view returns (address)
SHARE_PRICE_CALCULATOR_FACTORY
viewfunction SHARE_PRICE_CALCULATOR_FACTORY() view returns (address)
SHARE_TOKEN_IMPLEMENTATION
viewfunction SHARE_TOKEN_IMPLEMENTATION() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
createInsuranceCapitalLayer
nonpayablefunction createInsuranceCapitalLayer(string tokenName, string tokenSymbol, address admin, address operator, uint256 initialSharePrice) returns (address)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
events
InsuranceCapitalLayerCreated
event InsuranceCapitalLayerCreated(address indexed icl, address indexed shareToken)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
creation bytecode
0x61016034620001df57601f6200784e38819003918201601f19168301926001600160401b0392909183851183861017620001c9578160a09284926040978852833981010312620001df576200005481620001e4565b926200006360208301620001e4565b62000070828401620001e4565b926200008d60806200008560608401620001e4565b9201620001e4565b6001600160a01b0396871660805291861660a05292851660c05291841660e05290831661010090815281519093614a8e80830193929085851182861017620001c9576200138c823980600094039084f0938415620001bd578161012095168552825190611a348083019183831090831117620001a95790829162005e1a8339039084f09283156200019e5750610140921682526200012b33620001f9565b50519161110193846200028b85396080518481816102360152610526015260a05184610b2c015260c05184818161044a0152818161055601526109dc015260e051848181610182015261049a01525183610a2301525182818161027d01526105c00152518181816103fd01526109950152f35b8251903d90823e3d90fd5b634e487b7160e01b86526041600452602486fd5b505051903d90823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b51906001600160a01b0382168203620001df57565b6001600160a01b031660008181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205490919060ff166200028657818052816020526040822081835260205260408220600160ff1982541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b509056fe60808060405260043610156200001457600080fd5b600090813560e01c90816301ffc9a71462000b5b575080631cda4a8d1462000b14578063248a9ca31462000ae65780632f2ff15d1462000aa157806336568abe1462000a52578063439577a01462000a0b57806346203dd814620009c45780635db27897146200097d5780636eeb9f0814620002ac5780637a89862914620002655780638b7cc1e3146200021e57806391d1485414620001cf578063a217fddf14620001b1578063b18fd8a8146200016a578063d547741f14620001215763ecd0026114620000e257600080fd5b346200011e57806003193601126200011e5760206040517ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c8152f35b80fd5b50346200011e5760403660031901126200011e57620001666004356200014662000bb5565b908084528360205262000160600160408620015462000c73565b62000d19565b5080f35b50346200011e57806003193601126200011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346200011e57806003193601126200011e57602090604051908152f35b50346200011e5760403660031901126200011e576040620001ef62000bb5565b91600435815280602052209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b50346200011e57806003193601126200011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346200011e57806003193601126200011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346200011e5760a03660031901126200011e576004356001600160401b038111620007b657620002e290369060040162000c18565b906024356001600160401b038111620007b6576200030590369060040162000c18565b916044356001600160a01b0381169003620007b6576064356001600160a01b038116810362000979577ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c808452836020526040842033855260205260ff604085205416156200095b575060405163de7ea79d60e01b602082015260806024820152620003cd81620003b16200039e60a483018762000d8f565b8281036023190160448401528862000d8f565b6012606483015233608483015203601f19810183528262000bf6565b60405190816102d38101106001600160401b036102d38401111762000947576200042782916102d362000df984397f00000000000000000000000000000000000000000000000000000000000000006102d3840162000dd1565b039084f0938415620007ba57604051633d1c7bfd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152608480356024840152604480358316908401528482166064840152919291602091849190829089907f0000000000000000000000000000000000000000000000000000000000000000165af19182156200082b578592620008f9575b50916200050993916200051c6200059294604051968795632c021a4360e21b602088015233602488015260e0604488015261010487019062000d8f565b8581036023190160648701529062000d8f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116608486015292831660a48501527f0000000000000000000000000000000000000000000000000000000000000000831660c4850152911660e483015203601f19810183528262000bf6565b604051906102d382018281106001600160401b03821117620008e5578291620005e6916102d362000df985397f00000000000000000000000000000000000000000000000000000000000000009062000dd1565b039082f08015620008d85760405163a217fddf60e01b8082526001600160a01b0394851694929092169190602081600481885afa90811562000808578491620008a0575b50843b15620007c557604051632f2ff15d60e01b8082526004820192909252604480356001600160a01b031660248301528590829081838a5af180156200082b576200088a575b5060405163d539139360e01b8152602081600481895afa9081156200082b57859162000852575b50853b156200084e5760405182815260048101919091526001600160a01b03841660248201528481604481838a5af180156200082b5790859162000836575b5050823b15620007c5576040516340f797bb60e01b815260048101869052848160248183885af180156200082b5790859162000813575b5050604051918252602082600481865afa91821562000808578492620007c9575b50823b15620007c5576040519081526004810191909152604480356001600160a01b03166024830152839082908183865af18015620007ba576200079e575b50602092817fc914ea709f3eb6988a1adfd36b9ecfb22a736fce308704c1ed8c596a0301ef8e6040519480a38152f35b620007aa839162000bcc565b620007b657386200076e565b5080fd5b6040513d85823e3d90fd5b8380fd5b9091506020813d602011620007ff575b81620007e86020938362000bf6565b81010312620007fa575190386200072f565b600080fd5b3d9150620007d9565b6040513d86823e3d90fd5b6200081e9062000bcc565b620007c55783386200070e565b6040513d87823e3d90fd5b620008419062000bcc565b620007c5578338620006d7565b8480fd5b90506020813d60201162000881575b81620008706020938362000bf6565b81010312620007fa57513862000698565b3d915062000861565b620008989094919462000bcc565b923862000671565b90506020813d602011620008cf575b81620008be6020938362000bf6565b81010312620007c55751386200062a565b3d9150620008af565b50604051903d90823e3d90fd5b634e487b7160e01b84526041600452602484fd5b9091506020813d6020116200093e575b81620009186020938362000bf6565b810103126200084e57516001600160a01b03811681036200084e579062000592620004cc565b3d915062000909565b634e487b7160e01b85526041600452602485fd5b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b8280fd5b50346200011e57806003193601126200011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346200011e57806003193601126200011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346200011e57806003193601126200011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346200011e5760403660031901126200011e5762000a7062000bb5565b336001600160a01b0382160362000a8f57620001669060043562000d19565b60405163334bd91960e11b8152600490fd5b50346200011e5760403660031901126200011e576200016660043562000ac662000bb5565b908084528360205262000ae0600160408620015462000c73565b62000c9a565b50346200011e5760203660031901126200011e57600160406020926004358152808452200154604051908152f35b50346200011e57806003193601126200011e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b905034620007b6576020366003190112620007b65760043563ffffffff60e01b8116809103620009795760209250637965db0b60e01b811490811562000ba3575b5015158152f35b6301ffc9a760e01b1490503862000b9c565b602435906001600160a01b0382168203620007fa57565b6001600160401b03811162000be057604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b0382111762000be057604052565b81601f82011215620007fa578035906001600160401b03821162000be0576040519262000c50601f8401601f19166020018562000bf6565b82845260208383010111620007fa57816000926020809301838601378301015290565b80600052600060205260406000203360005260205260ff60406000205416156200095b5750565b9060009180835282602052604083209160018060a01b03169182845260205260ff6040842054161560001462000d1457808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b9060009180835282602052604083209160018060a01b03169182845260205260ff60408420541660001462000d145780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b919082519283825260005b84811062000dbc575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520162000d9a565b6001600160a01b03909116815260406020820181905262000df59291019062000d8f565b9056fe60806040526102d38038038061001481610194565b92833981019060408183031261018f5780516001600160a01b03811680820361018f5760208381015190936001600160401b03821161018f570184601f8201121561018f5780519061006d610068836101cf565b610194565b9582875285838301011161018f57849060005b83811061017b57505060009186010152813b15610163577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351156101455750600080848461012c96519101845af4903d1561013c573d61011c610068826101cf565b908152600081943d92013e6101ea565b505b6040516085908161024e8239f35b606092506101ea565b9250505034610154575061012e565b63b398979f60e01b8152600490fd5b60249060405190634c9c8ce360e01b82526004820152fd5b818101830151888201840152869201610080565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101b957604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b957601f01601f191660200190565b9061021157508051156101ff57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580610244575b610222575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561021a56fe60806040527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600090819081906001600160a01b0316368280378136915af43d82803e15604b573d90f35b3d90fdfea264697066735822122064e05d6b50f7e38be358c5202a9c5465626b986a9ff403ce9b298bc4f4509dbb64736f6c63430008140033a264697066735822122045488ccad43cd3fd25a2580e5fe10e8a86b826f118d5661e04b80ed45558e0e264736f6c6343000814003360a080604052346200013957306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080549091604082901c60ff161591906001600160401b0382168015908162000130575b600114908162000125575b1590816200011b575b506200010c57506001600160401b03198116600117835581620000ee575b50620000ac575b60405161494f90816200013f823960805181818161267b015261271e0152f35b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1386200008c565b6001600160481b031916680100000000000000011782553862000085565b63f92ee8a960e01b8152600490fd5b9050153862000067565b303b1591506200005e565b84915062000053565b600080fdfe6080604081815260048036101561001557600080fd5b600092833560e01c90816301ffc9a7146136f05750806305db2f41146136b5578063061525371461365c57806306fdde03146135725780630df9ef2c146135125780630efe6a8b146131f9578063156c2a6e146131d057806320483dd114613124578063205023d3146130e957806322b6fea914612fc957806323be345c14612fa0578063248a9ca314612f695780632b38e26614612f125780632ccbef8b14612d7d5780632e08ebcd14612d0c5780632e718ab714612cd15780632eebe78e14612cad5780632f2ff15d14612c845780633278eb0414612c5b57806336568abe14612c14578063383e6d4a14612b625780633e5541f114612ab15780633f4ba83a14612a3a57806340f797bb146129ae5780634788a26b1461294e5780634b155b97146129255780634efde8d0146129065780634f1ef286146126cd57806352d1902d146126665780635a8f00c8146126165780635b17d04b146125b15780635c975abb14612580578063608fc37a146121f3578063635b6a3a1461219357806363f926231461208157806366c4257b146120495780636c24a76f14611f635780636c9fa59e14611f3b57806375b238fc14611f00578063842a05d414611e775780638456cb5914611e0f57806384b594dc14611c405780638795feb814611adf5780638863e5c4146117a55780638dcfbfab146115ba5780639137c1771461157d57806391d148541461152b57806395d89b411461143757806399caf5dd1461120e5780639b18847e1461116d5780639f5bd0f3146110ba578063a217fddf1461109f578063a64b6e5f14610f52578063a819462514610d6a578063a981c7b414610d3d578063ad3cb1cc14610cf8578063b008690c14610a32578063b04b3f57146109f3578063b8b99b7a146109a5578063b8f82b2614610973578063beb96acf14610855578063c5cc6bb314610807578063c79445d0146107cc578063cc2b2523146107ad578063cf177dbc14610655578063d1f810a514610611578063d547741f146105c5578063e63ab1e91461058a578063f5b541a614610561578063f72c0d8b146105345763fade00fe1461033057600080fd5b3461044f57602090816003193601126104415780359061034e614245565b61035661421a565b6009546001600160a01b03908116330361052557821561050f5785541684516370a0823160e01b9081815230848201528581602481865afa801561050557859189916104d4575b501061045357509085916103b384600c54613f79565b600c55803b1561044f578383916103e093838951809681958294632770a7eb60e21b845230908401613ea0565b03925af180156104455761042d575b50507f0158b5c01453469bf562bebba531d45a08d8162682a2d56d652909caf8e9cbaa9251908152a160016000805160206148fa8339815191525580f35b610436906137b4565b6104415783386103ef565b8380fd5b85513d84823e3d90fd5b8280fd5b9380879395602488949851809981938252308a8301525afa9283156104c95792610493575b505163cf47918160e01b815292830152602482015260449150fd5b90915084813d83116104c2575b6104aa8183613813565b810103126104bd57604493519085610478565b600080fd5b503d6104a0565b8251903d90823e3d90fd5b809250878092503d83116104fe575b6104ed8183613813565b810103126104bd578490513861039d565b503d6104e3565b87513d8a823e3d90fd5b50602491845191633728b83d60e01b8352820152fd5b5083516367a3563f60e01b8152fd5b50503461055d578160031936011261055d576020905160008051602061483a8339815191528152f35b5080fd5b50503461055d578160031936011261055d576020905160008051602061489a8339815191528152f35b50503461055d578160031936011261055d57602090517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b50903461044f578060031936011261044f5761060d913561060860016105e961375a565b938387526000805160206148ba83398151915260205286200154613a5e565b613cca565b5080f35b50503461055d578060031936011261055d5761065190610643610632613744565b61063a61421a565b60243590614353565b919492935194859485613919565b0390f35b503461044f578160031936011261044f5761066e613744565b6024359061067a614245565b61068261421a565b6009546001600160a01b0391908216330361079d5716928051926370a0823160e01b845230818501526020938481602481895afa908115610793578791610766575b50858752600d85526106ed6106dc8489205486614275565b878952600e87528489205490614275565b9081811061074d57505050907f3b3cc6e6e4f41ea6d60a8a018c24e335d06b91f3eaa9dfc6e7f51cd00155c4e49291848652600d8352808620610731838254614275565b905551908152a260016000805160206148fa8339815191525580f35b604493519263adb9e04360e01b84528301526024820152fd5b90508481813d831161078c575b61077d8183613813565b810103126104bd5751386106c4565b503d610773565b83513d89823e3d90fd5b84516367a3563f60e01b81528490fd5b50503461055d578160031936011261055d576020906005549051908152f35b50503461055d578160031936011261055d57602090517fe28434228950b641dbbc0178de89daa359a87c6ee0d8399aeace52a98fe902b98152f35b50503461055d578060031936011261055d57602091610824613744565b8261082d61375a565b6001600160a01b039283168452600f8652922091166000908152908352819020549051908152f35b503461044f5761086436613874565b91939061086f614245565b61087761421a565b6009546001600160a01b039590861633036109635785821695861561094c57841561093557811694858852600d6020528388205485811061091657505050916020916108fc827f466568d995c4d20c1611745da0ee5c713e401f183df24615614ad6ce33e67fce95878a52600d8652838a206108f4838254613f79565b9055876147d4565b51908152a360016000805160206148fa8339815191525580f35b8561093191865194859463162f9a1960e31b865285016147fb565b0390fd5b8351633728b83d60e01b8152808701869052602490fd5b8351630bc2c5df60e11b8152808701889052602490fd5b82516367a3563f60e01b81528590fd5b50503461055d578060031936011261055d5761065190610643610994613744565b61099c61421a565b60243590613f9c565b50503461055d578060031936011261055d576020916109c2613744565b826109cb61375a565b6001600160a01b03928316845260108652922091166000908152908352819020549051908152f35b50503461055d578060031936011261055d57602090610a29610a13613744565b610a1b61375a565b90610a2461421a565b614736565b90519015158152f35b503461044f5760e036600319011261044f57610a4c613744565b906001600160401b03602435818111610cf457610a6c90369084016138fb565b50604435818111610cf457610a8490369084016138fb565b50610a8d613770565b926001600160a01b0392608435908482168083036104bd5760a435868116928382036104bd5760c435938885168095036104bd578a987ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009a60ff8c54809c1c1615998b169a8b1580610ced575b6001809d149081610ce3575b159081610cda575b50610cca5767ffffffffffffffff1981168c178d558a610cab575b50610b32613de0565b610b3a613de0565b8a6000805160206148fa83398151915255610b53613de0565b610b5b613de0565b610b63613de0565b6000805160206148da833981519152805460ff19169055610b82613de0565b81891615610c9b5716938415610c8b5715610c7c5715610c6e578315610c60575086546001600160a01b0319908116909217875560068054610100600160a81b03191660089290921b610100600160a81b0316919091179055600780549091169091179055610c199190610c0990610bf983613a91565b50610c0333613a91565b50613b1f565b50610c1333613b1f565b50613bbd565b50610c22578380f35b815460ff60401b191690915590519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880808380f35b8951630538eaff60e51b8152fd5b8951637bfd2e8360e01b8152fd5b50895163eb32d3bf60e01b8152fd5b8b51630201aae160e21b81528390fd5b8c5163016ed19f60e21b81528490fd5b68ffffffffffffffffff191668010000000000000001178c5538610b29565b8d5163f92ee8a960e01b81528590fd5b90501538610b0e565b303b159150610b06565b508a610afa565b8580fd5b50503461055d578160031936011261055d57805161065191610d19826137dd565b60058252640352e302e360dc1b602083015251918291602083526020830190613834565b50503461055d578160031936011261055d57600654905160089190911c6001600160a01b03168152602090f35b5082903461055d578260031936011261055d57610d85613744565b92602490813590610d94614245565b610d9c61421a565b6009546001600160a01b039081163303610f4257808716948515610f2c578315610f175781875416908351956370a0823160e01b808852308389015260209788818481885afa908115610f0d579088918c91610edc575b5010610e6e5750505050828697610e5492877f3a19b6efdb4fa34812cbff59a94c0d953fa352016b0c438a40a5520d69b26492989952600b8752848a20610e3b848254613f79565b9055610e4983600c54613f79565b600c558954166147d4565b51908152a260016000805160206148fa8339815191525580f35b90898689808a95858451809a81938252308b8301525afa9283156104c95792610eab575b505163cf47918160e01b81529384015282015260449150fd5b90915085813d8311610ed5575b610ec28183613813565b810103126104bd57604494519086610e92565b503d610eb8565b8092508a8092503d8311610f06575b610ef58183613813565b810103126104bd578790518d610df3565b503d610eeb565b87513d8d823e3d90fd5b939450505191633728b83d60e01b8352820152fd5b8251630bc2c5df60e11b81529081018690528490fd5b81516367a3563f60e01b81528590fd5b5082903461055d57610f6336613874565b92610f6f929192614245565b610f7761421a565b6008546001600160a01b0392908316330361109057821691821561107a57831680156110645750831561104d5785516370a0823160e01b81523082820152602081602481865afa908115611043578691611012575b50848110610ff6575050610fe19394506147d4565b60016000805160206148fa8339815191525580f35b865163adb9e04360e01b81529182015260248101849052604490fd5b90506020813d821161103b575b8161102c60209383613813565b810103126104bd575187610fcc565b3d915061101f565b87513d88823e3d90fd5b8551633728b83d60e01b8152908101849052602490fd5b8651630bc2c5df60e11b81529182015260249150fd5b5060249186519163961c9a4f60e01b8352820152fd5b50855163b693a60960e01b8152fd5b50503461055d578160031936011261055d5751908152602090f35b50503461055d5760208060031936011261044f576110d6613744565b926110df61421a565b6001600160a01b039384168152600a825282812083518154808252918352838320818501949192859190855b8181106111575750505082611121910383613813565b8451948186019282875251809352850193925b8281106111415785850386f35b8351871685529381019392810192600101611134565b82548a168452928401926001928301920161110b565b50913461120b578160031936011261120b57611187613744565b9161119061375a565b60018060a01b03809416938484526010602052828420911690816000526020528160002054938352600f60205281832090600052602052806000205483810392808512828512811690838613901516176111f857506060945081519384526020840152820152f35b634e487b7160e01b815260118652602490fd5b80fd5b50903461044f578060031936011261044f57611228613744565b9060243590611235614245565b61123d61421a565b6001600160a01b03831692831561142057821561140957331580156113f0575b6113d457508051636eb1769f60e11b8082526020959186818061128330338884016145af565b0381895afa9081156113ca579085918991611399575b501061130d575050828552600f8452808520336000528452806000206112c0838254614275565b90556112ce823033866142a4565b519081527fdad7dfd8821ceb98a6dd83b8f330e604bd0e832f55ca902bbfadabde5e40132342933392a460016000805160206148fa8339815191525580f35b9480919583949593519384918252818061132a30338c84016145af565b03915afa95861561138e579561135a575b505051630c95cf2760e11b8152928392610931929190339085016147fb565b908093929550813d8311611387575b6113738183613813565b810103126104bd579051926109313861133b565b503d611369565b8351903d90823e3d90fd5b809250888092503d83116113c3575b6113b28183613813565b810103126104bd5784905138611299565b503d6113a8565b84513d8a823e3d90fd5b815163188fe79360e21b815290819061093190338389016145af565b506113f961421a565b6114033382614736565b1561125d565b8151633728b83d60e01b8152808601849052602490fd5b815163961c9a4f60e01b8152808601859052602490fd5b50913461120b578060031936011261120b575080519060009060035491600183811c90808516948515611521575b602095868410811461150e578388528794939291879082156114ec5750506001146114ac575b5050610651929161149d910385613813565b51928284938452830190613834565b90859250600360005282600020916000925b8284106114d4575050508201018161149d61148b565b8054848a0186015288955087949093019281016114be565b60ff19168682015292151560051b8501909201925083915061149d905061148b565b634e487b7160e01b855260228952602485fd5b91607f1691611465565b503461044f578160031936011261044f578160209361154861375a565b923581526000805160206148ba8339815191528552209060018060a01b0316600052825260ff81600020541690519015158152f35b50503461055d5736600319011261120b576115b7611599613744565b6115a161375a565b906115aa61421a565b6115b26139a6565b6145d8565b80f35b5082903461055d578260031936011261055d576115d5613744565b92602435906115e2614245565b6115ea61421a565b6009546001600160a01b0390811633036117955780861693841561177e5783156117675785548351636eb1769f60e11b80825260209695949392841691878180611637308f838a016145af565b0381865afa90811561175d579087918b9161172c575b50106116af5750505082610e54918798877f6926ad0f7f6f6814be2630ac9d46a2d1988f933254ad20700c1425aaf64a27a4989952600b8752848a20611694848254614275565b90556116a283600c54614275565b600c5530918a54166142a4565b8993508885888089948351968791825281806116ce308d8d84016145af565b03915afa9283156104c957926116fa575b5051630c95cf2760e11b8152948594610931945085016147fb565b90915083813d8311611725575b6117118183613813565b810103126104bd57610931925190866116df565b503d611707565b809250898092503d8311611756575b6117458183613813565b810103126104bd578690518c61164d565b503d61173b565b86513d8c823e3d90fd5b8251633728b83d60e01b8152908101849052602490fd5b82516313053d9360e21b8152908101859052602490fd5b81516367a3563f60e01b81528490fd5b503461044f57608036600319011261044f576117bf613744565b6024803592604435916117d0613770565b926117d9614245565b6117e161421a565b60015487516373bed91960e11b81526001600160a01b0386811686830152939160209190829082908590829089165afa908115611ad5578b91611ab8575b5015611aa85761182d61421a565b60065460ff811615611a98578815611a825789516313a9822560e31b8152888616878201819052949160081c86169083818681855afa9081156119fa578d91611a55575b5015611a3f578a5163146f4ea360e21b815295949392919082908790818061189c8f8f838f01613ea0565b03915afa928315611a35578c93611a04575b6118e09650826118be858d613f79565b8d8c8b8a6007541692519b8c9485938493633e5541f160e01b85528401613ea0565b03915afa9687156119fa578d976119cb575b508187106119b05750508261192692878b938e9a999897968b525261191b8c8a20918254614275565b9055309033906142a4565b845416803b156119ac57611951938580948a51968795869485936340c10f1960e01b85528401613ea0565b03925af1801561044557611998575b505061198060008051602061487a83398151915293519283923384614282565b0390a160016000805160206148fa8339815191525580f35b6119a1906137b4565b610441578338611960565b8480fd5b6044918891888e519363658ec5dd60e11b8552840152820152fd5b9096508281813d83116119f3575b6119e38183613813565b810103126104bd575195386118f2565b503d6119d9565b8c513d8f823e3d90fd5b92508186813d8311611a2e575b611a1b8183613813565b810103126104bd576118e09551926118ae565b503d611a11565b8b513d8e823e3d90fd5b8a51639d42b4b360e01b81528088018690528490fd5b611a759150843d8611611a7b575b611a6d8183613813565b810190613e53565b38611871565b503d611a63565b8951633728b83d60e01b81528087018a90528390fd5b895163bb60b89360e01b81528690fd5b885163110781d160e31b81528590fd5b611acf9150823d8411611a7b57611a6d8183613813565b3861181f565b8a513d8d823e3d90fd5b50903461044f578060031936011261044f57611af9613744565b92611b0261375a565b93611b0b614245565b611b1361421a565b7f6c0757dc3e6b28b2580c03fd9e96c274acf4f99d91fbec9b418fa1d70604ff1c94856000526020956000805160206148ba83398151915287528460002033600052875260ff85600020541615611c2257506001600160a01b03918216918215611c0b578116928315611bf45782815285875284812054958615611be657838252875284812055611ba6908590836147d4565b7fd74e462593ae4127bbc183389b3775357426f157e9625f81271612b86b8000a6858451868152a360016000805160206148fa8339815191525551908152f35b855163211b631760e21b8152fd5b8451630bc2c5df60e11b8152808701859052602490fd5b845163961c9a4f60e01b8152808701849052602490fd5b845163e2517d3f60e01b815233818801526024810191909152604490fd5b50903461044f57611c5036613874565b93909192611c5c61393e565b611c64614245565b611c6c61421a565b6001600160a01b0383811694908515611df8578615611de15781169384158015611dc8575b611dac575081516370a0823160e01b815230848201526020939084816024818a5afa908115611da2578991611d73575b50611cda611ceb91888b52600d8752858b205490613f79565b878a52600e8652848a205490613f79565b878110611d5757505090611d3b867ff7924cd170ae143405ff2557ce6b4615c3a29b30bcd8a70b49d4d0b3475efb0c9493878a5260108552838a20876000528552836000206108f4838254614275565b519485524294a460016000805160206148fa8339815191525580f35b835163adb9e04360e01b81529182015260248101879052604490fd5b90508481813d8311611d9b575b611d8a8183613813565b810103126104bd5751611cda611cc1565b503d611d80565b84513d8b823e3d90fd5b915163188fe79360e21b815292839261093192909184016145af565b50611dd161421a565b611ddb8282614736565b15611c91565b8251633728b83d60e01b8152808501889052602490fd5b825163961c9a4f60e01b8152808501879052602490fd5b50503461055d578160031936011261055d5760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891611e4d613a02565b611e5561421a565b6000805160206148da833981519152805460ff1916600117905551338152a180f35b50903461044f57602036600319011261044f57611e92613744565b611e9a61421a565b611ea261393e565b6001600160a01b0316918215611ef25750600880546001600160a01b03191683179055519081527f507e88d0e3541203c8e7dba038a3e807ac9121f0872ed9ed895cd7f3358334eb90602090a180f35b9051630d432b0160e21b8152fd5b50503461055d578160031936011261055d57602090517fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758152f35b50503461055d578160031936011261055d57905490516001600160a01b039091168152602090f35b503461044f576020928360031936011261120b576001600160a01b03611f87613744565b84516370a0823160e01b8152308582015291168582602481845afa91821561203f578392612010575b508252600d85528382205490600e8652848320549386528483205492611fdf84611fda8786614275565b614275565b821115612005575092611ff8611ff892611ffd95613f79565b613f79565b905b51908152f35b935050505090611fff565b9091508581813d8311612038575b6120288183613813565b810103126104bd57519038611fb0565b503d61201e565b85513d85823e3d90fd5b50503461055d57602036600319011261055d5760209181906001600160a01b03612071613744565b168152600b845220549051908152f35b503461044f578160031936011261044f5761209a613744565b600854602435916001600160a01b0391821633036121835716928051926370a0823160e01b845230818501526020938481602481895afa908115610793578791612156575b50858752600e85526121086120f78489205486614275565b878952600d87528489205490614275565b9081811061074d57505050907f36bea377ee4a4c4516cc608cc232173faafbeb7ee10ad11c6420f2863a97644b9291848652600e835280862061214c838254614275565b905551908152a280f35b90508481813d831161217c575b61216d8183613813565b810103126104bd5751386120df565b503d612163565b845163b693a60960e01b81528490fd5b503461044f57602036600319011261044f576121ad613744565b6121b561421a565b6121bd61393e565b6001600160a01b03169182156121e6575050600780546001600160a01b03191691909117905580f35b51630538eaff60e51b8152fd5b5082906020928360031936011261044f5781359161220f614245565b61221761421a565b60015482516373bed91960e11b815233838201526001600160a01b03949187908290602490829089165afa908115612576578691612559575b501561254a57341561253b5760065460ff81161561252b57849060081c1683519463e861e90760e01b865287868581855afa9586156125215787966124e5575b5084516313a9822560e31b815286821685820181905293908981602481875afa90811561246b5789916124c8575b50156124b057888651809463146f4ea360e21b825281806122e2348d8c8401613ea0565b03915afa9081156124a6578891612475575b6123249350896123048334613f79565b84600754168a8a51809881948293633e5541f160e01b84528d8401613ea0565b03915afa93841561246b57899461243c575b5080841061241f5750848899858a98999a5252612357878720918254614275565b9055845416803b156119ac5785516340c10f1960e01b8152918591839182908490829061238790338b8401613ea0565b03925af1801561241557908491612401575b5050803b1561044f578290845192838092630d0e30db60e41b825234905af180156123f7576123e3575b50815160008051602061487a833981519152908061198034873384614282565b6123ec906137b4565b61044f5782846123c3565b83513d84823e3d90fd5b61240a906137b4565b61044f578287612399565b85513d86823e3d90fd5b93505050604493519263658ec5dd60e11b84528301526024820152fd5b9093508981813d8311612464575b6124548183613813565b810103126104bd5751928a612336565b503d61244a565b87513d8b823e3d90fd5b90508883813d831161249f575b61248c8183613813565b810103126104bd576123249251906122f4565b503d612482565b86513d8a823e3d90fd5b50509251639d42b4b360e01b81529182015260249150fd5b6124df91508a3d8c11611a7b57611a6d8183613813565b8a6122be565b9095508781813d831161251a575b6124fd8183613813565b8101031261251657518581168103612516579488612290565b8680fd5b503d6124f3565b85513d89823e3d90fd5b835163bb60b89360e01b81528390fd5b509051633b903ec760e01b8152fd5b50905163110781d160e31b8152fd5b6125709150873d8911611a7b57611a6d8183613813565b87612250565b84513d88823e3d90fd5b50503461055d578160031936011261055d5760209060ff6000805160206148da833981519152541690519015158152f35b503461044f57602036600319011261044f57803590811515809203610441576125d861421a565b6125e061393e565b600654928260ff851615151461260157505060ff169060ff19161760065580f35b91602492519163ca255b0b60e01b8352820152fd5b503461044f57602036600319011261044f576001600160a01b03612638613744565b168015612652579282916020948252845220549051908152f35b602492519163961c9a4f60e01b8352820152fd5b50913461120b578060031936011261120b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036126c0576020905160008051602061485a8339815191528152f35b5163703e46dd60e11b8152fd5b50908060031936011261044f576126e2613744565b9060249384356001600160401b03811161055d573660238201121561055d57612713903690878188013591016138c4565b6001600160a01b03937f000000000000000000000000000000000000000000000000000000000000000085163081149081156128ea575b506128da5760008051602061483a83398151915294856000526020956000805160206148ba83398151915287528560002033600052875260ff866000205416156128bd575081169484516352d1902d60e01b8152818189818a5afa85918161288e575b506127c85750505050505191634c9c8ce360e01b8352820152fd5b868996899260008051602061485a833981519152908181036128795750853b156128645780546001600160a01b0319168317905551869392917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2855115612848575050835161060d94839201845af4612842613d4d565b91613d7d565b9350935050503461285857505080f35b63b398979f60e01b8152fd5b5051634c9c8ce360e01b815291820152859150fd5b848a91845191632a87526960e21b8352820152fd5b9091508281813d83116128b6575b6128a68183613813565b81010312610cf4575190386127ad565b503d61289c565b855163e2517d3f60e01b815233818a0152808a0191909152604490fd5b835163703e46dd60e11b81528690fd5b90508560008051602061485a833981519152541614153861274a565b50503461055d578160031936011261055d57602090600c549051908152f35b50503461055d578160031936011261055d5760015490516001600160a01b039091168152602090f35b503461044f57602036600319011261044f57612968613744565b61297061421a565b61297861393e565b6001600160a01b03169182156129a1575050600180546001600160a01b03191691909117905580f35b51630201aae160e21b8152fd5b50903461044f57602036600319011261044f5781356001600160a01b0381169290839003610441576129de61393e565b6011549160ff8316612a2d57505082546001600160a01b0319168217835560ff19166001176011557fdb40a5259506fa101ac4485d4ccbd019c99ada5fb7212fe1254374f7a10e02dc8280a280f35b51630f4bac1b60e21b8152fd5b503461044f578260031936011261044f57612a53613a02565b6000805160206148da8339815191529081549060ff821615612aa3575060ff19169055513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a180f35b8351638dfc202b60e01b8152fd5b5091903461055d578060031936011261055d576020612b0893612ad2613744565b612ada61421a565b6007548451633e5541f160e01b81529687936001600160a01b03909216928492839291602435918401613ea0565b03915afa918215612b575791612b23575b6020925051908152f35b90506020823d8211612b4f575b81612b3d60209383613813565b810103126104bd576020915190612b19565b3d9150612b30565b9051903d90823e3d90fd5b50903461044f578060031936011261044f57612b7c613744565b6008546024359291906001600160a01b039081163303612c0457811693848652600e60205282862054848110612be9575050507fbcb639e764c5cd7d736acef943167eb10be8fc46f9e33b29c69c89473fb79fd791602091848652600e835280862061214c838254613f79565b84610931918551948594631664bf6360e01b865285016147fb565b825163b693a60960e01b81528590fd5b5091903461055d578060031936011261055d57612c2f61375a565b90336001600160a01b03831603612c4c575061060d919235613cca565b5163334bd91960e11b81528390fd5b50503461055d578160031936011261055d5760095490516001600160a01b039091168152602090f35b50903461044f578060031936011261044f5761060d9135612ca860016105e961375a565b613c55565b50503461055d578160031936011261055d5760209060ff6006541690519015158152f35b50503461055d578160031936011261055d57602090517f85e8f2d6819d6b24108062d87ea08f54651bcb8960d98062d3faf96e7873b8b98152f35b503461044f57602036600319011261044f57612d26613744565b91612d2f61421a565b612d3761393e565b6001600160a01b03831615612d7057505060068054610100600160a81b03191660089290921b610100600160a81b031691909117905580f35b51637bfd2e8360e01b8152fd5b50903461044f57612d8d36613874565b93909192612d99614245565b612da161421a565b6008546001600160a01b03949085163303612f04578416938415612eed5783168015612ed857508415612ec2578051636eb1769f60e11b808252602091828180612dee308a8a84016145af565b03818a5afa908115611da2579088918a91612e91575b5010612e175787610fe18830888a6142a4565b81908398949795985196879182528180612e34308d8d84016145af565b03915afa9283156104c95792612e5f575051630c95cf2760e11b8152948594610931945085016147fb565b90915083813d8311612e8a575b612e768183613813565b810103126104bd57610931925190386116df565b503d612e6c565b809250848092503d8311612ebb575b612eaa8183613813565b810103126104bd5787905138612e04565b503d612ea0565b51633728b83d60e01b8152908101849052602490fd5b90516313053d9360e21b815291820152602490fd5b815163961c9a4f60e01b8152808401869052602490fd5b505163b693a60960e01b8152fd5b5091903461055d578060031936011261055d576020612b0893612f33613744565b612f3b61421a565b600754845163159c713360e11b81529687936001600160a01b03909216928492839291602435918401613ea0565b503461044f57602036600319011261044f57816020936001923581526000805160206148ba83398151915285522001549051908152f35b50503461055d578160031936011261055d5760085490516001600160a01b039091168152602090f35b50903461044f578060031936011261044f57612fe3613744565b91612fec61375a565b90612ff561421a565b612ffd6139a6565b6001600160a01b0384811693908415612eed5783169485156130d05761302161421a565b61302b8482614736565b6130b75750838652600a6020528520805491600160401b8310156130a457508161305e91600161307d9594018155613786565b90919082549060031b9160018060a01b03809116831b921b1916179055565b7f2c79891dd909910a9ed2116eb868a4783a4abeb6da7c8dc217cd5b198b329b5d8380a380f35b634e487b7160e01b875260419052602486fd5b610931915193849363aebbe4f960e01b855284016145af565b610931915193849363188fe79360e21b855284016145af565b50503461055d578160031936011261055d57602090517f0792b37891b8244bb8149106fc05e84f10f266ef581c099bf3d880350e979b2f8152f35b50823461120b576020908160031936011261120b576001600160a01b03613149613744565b1690818152600d835282858220549460248751809581936370a0823160e01b835230908301525afa9081156131c5578491613194575b6131899250613f79565b908351928352820152f35b50508181813d83116131be575b6131ab8183613813565b810103126104bd5782613189915161317f565b503d6131a1565b8551903d90823e3d90fd5b50503461055d578160031936011261055d5760075490516001600160a01b039091168152602090f35b50913461120b57606036600319011261120b57613214613744565b92602493843591604435613226614245565b61322e61421a565b60015486516373bed91960e11b815233848201526020986001600160a01b0393929091908a9082908490829088165afa9081156135085788916134eb575b50156134db5761327a61421a565b60065460ff8116156134cb5786156134b657839060081c1698899289516313a9822560e31b815282818581898c1698898c8301525afa9081156134ac578a9161348f575b501561347957818a51809c63146f4ea360e21b825281806132e28d8d8d8401613ea0565b03915afa92831561346f578993613439575b88999a9b50826133088561332b9a9b613f79565b6007548e51633e5541f160e01b81529a8b92918a1691839182918f838f01613ea0565b03915afa97881561342f578b986133fc575b508188106133e15750509187918561336194838c525261191b8b8b20918254614275565b85541690813b15610cf45791859161338f938389518096819582946340c10f1960e01b845233908401613ea0565b03925af18015612415576133be575b5061198060008051602061487a8339815191529394519283923384614282565b60008051602061487a833981519152936133da611980926137b4565b935061339e565b6044918791898e519363658ec5dd60e11b8552840152820152fd5b9097508281813d8311613428575b6134148183613813565b810103126134245751963861333d565b8a80fd5b503d61340a565b8c513d8d823e3d90fd5b9250818b813d8311613468575b6134508183613813565b8101031261346457995198998a99926132f4565b8880fd5b503d613446565b8a513d8b823e3d90fd5b8951639d42b4b360e01b81528087018590528390fd5b6134a69150833d8511611a7b57611a6d8183613813565b386132be565b8b513d8c823e3d90fd5b508751633728b83d60e01b8152808501879052fd5b885163bb60b89360e01b81528590fd5b875163110781d160e31b81528490fd5b61350291508a3d8c11611a7b57611a6d8183613813565b3861326c565b89513d8a823e3d90fd5b503461044f57602036600319011261044f5761352c613744565b61353461421a565b61353c61393e565b6001600160a01b0316918215613565575050600980546001600160a01b03191691909117905580f35b516348db2b6f60e11b8152fd5b50913461120b578060031936011261120b578151918160025492600184811c91818616958615613652575b602096878510811461363f578899509688969785829a5291826000146136185750506001146135da575b505050610651929161149d910385613813565b9190869350600283528383205b828410613600575050508201018161149d6106516135c7565b8054848a0186015288955087949093019281016135e7565b60ff19168782015293151560051b8601909301935084925061149d915061065190506135c7565b634e487b7160e01b835260228a52602483fd5b92607f169261359d565b50503461055d578060031936011261055d57613676613744565b6001600160a01b039081168352600a6020528183208054602435949085101561120b57506020936136a691613786565b92905490519260031b1c168152f35b50503461055d578160031936011261055d57602090517f6c0757dc3e6b28b2580c03fd9e96c274acf4f99d91fbec9b418fa1d70604ff1c8152f35b9250503461044f57602036600319011261044f573563ffffffff60e01b811680910361044f5760209250637965db0b60e01b8114908115613733575b5015158152f35b6301ffc9a760e01b1490503861372c565b600435906001600160a01b03821682036104bd57565b602435906001600160a01b03821682036104bd57565b606435906001600160a01b03821682036104bd57565b805482101561379e5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b6001600160401b0381116137c757604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176137c757604052565b602081019081106001600160401b038211176137c757604052565b90601f801991011681019081106001600160401b038211176137c757604052565b919082519283825260005b848110613860575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161383f565b60609060031901126104bd576001600160a01b039060043582811681036104bd579160243590811681036104bd579060443590565b6001600160401b0381116137c757601f01601f191660200190565b9291926138d0826138a9565b916138de6040519384613813565b8294818452818301116104bd578281602093846000960137010152565b9080601f830112156104bd57816020613916933591016138c4565b90565b9092608092613916959483526020830152151560408201528160608201520190613834565b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460008051602061489a8339815191529060ff16156139885750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527f4e5d4d14b1d64b65403760d275670011644f8f7998f1ef964b0082bdadeaa41460205260409020547f0792b37891b8244bb8149106fc05e84f10f266ef581c099bf3d880350e979b2f9060ff16156139885750565b3360009081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b60205260409020547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9060ff16156139885750565b806000526000805160206148ba83398151915260205260406000203360005260205260ff60406000205416156139885750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120549091906000805160206148ba8339815191529060ff16613b1a578280526020526040822081835260205260408220600160ff19825416179055339160008051602061481a8339815191528180a4600190565b505090565b6001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604081205490919060008051602061489a833981519152906000805160206148ba8339815191529060ff16613bb7578184526020526040832082845260205260408320600160ff1982541617905560008051602061481a833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a8602052604081205490919060008051602061483a833981519152906000805160206148ba8339815191529060ff16613bb7578184526020526040832082845260205260408320600160ff1982541617905560008051602061481a833981519152339380a4600190565b906000918083526000805160206148ba83398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014613bb7578184526020526040832082845260205260408320600160ff1982541617905560008051602061481a833981519152339380a4600190565b906000918083526000805160206148ba83398151915280602052604084209260018060a01b03169283855260205260ff604085205416600014613bb757818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b3d15613d78573d90613d5e826138a9565b91613d6c6040519384613813565b82523d6000602084013e565b606090565b90613da45750805115613d9257805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580613dd7575b613db5575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15613dad565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613e0f57565b604051631afcd79f60e31b8152600490fd5b60405190613e2e826137dd565b601682527511195c1bdcda5d081a5cc81b9bdd08195b98589b195960521b6020830152565b908160209103126104bd575180151581036104bd5790565b60405190613e78826137dd565b6019825278151bdad95b8819195c1bdcda5d081b9bdd08195b98589b1959603a1b6020830152565b6001600160a01b039091168152602081019190915260400190565b60009060033d11613ec857565b905060046000803e60005160e01c90565b600060443d1061391657604051600319913d83016004833e81516001600160401b03918282113d602484011117613f3657818401948551938411613f3e573d85010160208487010111613f36575061391692910160200190613813565b949350505050565b50949350505050565b60405190613f54826137dd565b60168252754572726f722063616c63756c6174696e67206665657360501b6020830152565b91908203918211613f8657565b634e487b7160e01b600052601160045260246000fd5b6006549160ff83161561420657604080516313a9822560e31b81526001600160a01b03848116600483015260209592949260081c8116918681602481865afa9081156141fb576000916141de575b50156141c757831561419357858551809363146f4ea360e21b82528180614015898960048401613ea0565b03915afa60009281614164575b5061406d57505050505050614035613ebb565b6308c379a014614051575b600090600090600090613916613f47565b614059613ed9565b806140645750614040565b60009182918291565b61409e9261407d87938096613f79565b9160075416908651809581948293633e5541f160e01b845260048401613ea0565b03915afa60009181614135575b5061411d5750506140ba613ebb565b6308c379a0146140ff575b600092600092774572726f722063616c63756c6174696e672073686172657360401b60009351916140f5836137dd565b6018835282015290565b614107613ed9565b8061411257506140c5565b600093849350839250565b909250926001915161412e816137f8565b6000815290565b90918582813d831161415d575b61414c8183613813565b8101031261120b57505190386140ab565b503d614142565b90928782813d831161418c575b61417b8183613813565b8101031261120b5750519138614022565b503d614171565b505050506000926000926d125b9d985b1a5908185b5bdd5b9d60921b60009351916141bd836137dd565b600e835282015290565b505050505050600090600090600090613916613e6b565b6141f59150873d8911611a7b57611a6d8183613813565b38613fea565b86513d6000823e3d90fd5b505050600090600090600090613916613e21565b60ff6000805160206148da833981519152541661423357565b60405163d93c066560e01b8152600490fd5b6000805160206148fa83398151915260028154146142635760029055565b604051633ee5aeb560e01b8152600490fd5b91908201809211613f8657565b6001600160a01b03918216815291166020820152604081019190915260600190565b906142da906142cc6142df956040519586936323b872dd60e01b602086015260248501614282565b03601f198101845283613813565b6142e1565b565b60008061430a9260018060a01b03169360208151910182865af1614303613d4d565b9083613d7d565b8051908115159182614338575b50506143205750565b60249060405190635274afe760e01b82526004820152fd5b61434b9250602080918301019101613e53565b153880614317565b906006549160ff83161561420657604080516313a9822560e31b81526001600160a01b038381166004830152602095929460089390931c81169392918681602481885afa9081156141fb57600091614592575b50156141c757858215614556576143d992600092600754168751808096819463159c713360e11b83528960048401613ea0565b03915afa90918282614524575b5050614454575050506143f7613ebb565b6308c379a014614441575b6000926000927f4572726f722063616c63756c6174696e6720746f6b656e20616d6f756e7400006000935191614437836137dd565b601e835282015290565b614449613ed9565b806141125750614402565b9380916144789386918651809681948293637b897f3960e01b845260048401613ea0565b03915afa9182916000936144f3575b50506144cd575050614497613ebb565b6308c379a0146144b1575b90600090600090613916613f47565b6144b9613ed9565b806144c457506144a2565b90916000918291565b806144da91949293614275565b90600192516144e8816137f8565b600081529193929190565b8181949293943d831161451d575b61450b8183613813565b8101031261120b575051903880614487565b503d614501565b909192508682813d831161454f575b61453d8183613813565b8101031261120b5750519038806143e6565b503d614533565b505050505060009260009274125b9d985b1a59081cda185c995cc8185b5bdd5b9d605a1b6000935191614588836137dd565b6015835282015290565b6145a99150873d8911611a7b57611a6d8183613813565b386143a6565b6001600160a01b0391821681529116602082015260400190565b6000198114613f865760010190565b90916001600160a01b03808316801561471e5781851691821561470257600090828252600a60205260408220825b8154808210156146e657838761461c8486613786565b929054600393841b1c161461463b575050614636906145c9565b614606565b9495969798509850600092919219988981019081116146d2579061305e836146666146749487613786565b905490881b1c169185613786565b81549788156146be577f1c0cdcc74010449d4477f9576aaf31cee9e18d2611031462fcd5bf5329dec88e9596979801926146ae8484613786565b81939154921b1b191690555580a3565b634e487b7160e01b85526031600452602485fd5b634e487b7160e01b86526011600452602486fd5b60405163188fe79360e21b8152806109318b8d600484016145af565b60405163188fe79360e21b8152806109318789600484016145af565b6024906040519063961c9a4f60e01b82526004820152fd5b9060018060a01b03806000931683526020600a815260408420604051808284829454938481520190885284882092885b868282106147bc5750505061477d92500382613813565b845b81518110156147b45783838260051b8401015116848616146147a9576147a4906145c9565b61477f565b505050505050600190565b505050505090565b85548916845260019586019587955093019201614766565b6142da6142df93926142cc60405194859263a9059cbb60e01b602085015260248401613ea0565b604091949392606082019560018060a01b031682526020820152015256fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a797667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220fbaa222c959a451004fc60e5053a68456e1a81d56e2c69708db30c8c45627ef864736f6c6343000814003360a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b60405161196290816100d28239608051818181610a080152610aaf0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610059565b63f92ee8a960e01b8152600490fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146111e95750806306fdde031461114b578063095ea7b3146110ca57806318160ddd1461109f57806323b872dd14610fba578063248a9ca314610f7e5780632f2ff15d14610f32578063313ce56714610f1157806336568abe14610eca57806340c10f1914610e0c5780634f1ef28614610a6057806352d1902d146109f557806370a08231146109ae57806391d148541461095457806395d89b411461086f5780639dc29fac1461078a578063a217fddf1461076e578063a9059cbb1461073d578063ad3cb1cc146106e9578063d5391393146106ae578063d547741f14610660578063dd62ed3e14610617578063de7ea79d146101555763f72c0d8b1461012757600080fd5b3461015057600036600319011261015057602060405160008051602061188d8339815191528152f35b600080fd5b34610150576080366003190112610150576004356001600160401b03811161015057610185903690600401611356565b6024356001600160401b038111610150576101a4903690600401611356565b60443560ff81168103610150576064356001600160a01b03811690036101505760008051602061190d83398151915254906001600160401b03821680159081610607575b60011490816105fd575b1590816105f4575b506105e25760016001600160401b031983161760008051602061190d8339815191525560ff8260401c16156105b5575b6102326117c5565b61023a6117c5565b83516001600160401b0381116104a25761026260008051602061182d8339815191525461167e565b601f8111610547575b506020601f82116001146104c35781929394956000926104b8575b50508160011b916000199060031b1c19161760008051602061182d833981519152555b82516001600160401b0381116104a2577f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04906102e5825461167e565b601f811161045a575b506020601f82116001146103f157819060ff95966000926103e6575b50508160011b916000199060031b1c19161790555b6103276117c5565b61032f6117c5565b1660ff19600054161760005561034660643561145a565b506103503361145a565b5061035c6064356114e8565b506040519060ff906064356001600160a01b03167fa479080e7e939829babda407ef044045c57ee261eb6bebe01946a649d8a8735e600080a260401c16156103a057005b60008051602061190d833981519152805460ff60401b19169055600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b01519050868061030a565b601f1982169583600052816000209660005b81811061044257509160ff969791846001959410610429575b505050811b01905561031f565b015160001960f88460031b161c1916905586808061041c565b83830151895560019098019760209384019301610403565b826000526020600020601f830160051c81019160208410610498575b601f0160051c01905b81811061048c57506102ee565b6000815560010161047f565b9091508190610476565b634e487b7160e01b600052604160045260246000fd5b015190508580610286565b60008051602061182d833981519152600052806000209060005b601f198416811061052f575060019394959683601f19811610610516575b505050811b0160008051602061182d833981519152556102a9565b015160001960f88460031b161c191690558580806104fb565b9091602060018192858b0151815501930191016104dd565b60008051602061182d8339815191526000527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c8101602084106105ae575b601f830160051c820181106105a257505061026b565b6000815560010161058c565b508061058c565b68ffffffffffffffffff198216680100000000000000011760008051602061190d8339815191525561022a565b60405163f92ee8a960e01b8152600490fd5b905015856101fa565b303b1591506101f2565b604084901c60ff161591506101e8565b34610150576040366003190112610150576106306112b7565b61064161063b6112cd565b91611374565b9060018060a01b03166000526020526020604060002054604051908152f35b34610150576040366003190112610150576106ac60043561067f6112cd565b90806000526000805160206118ed8339815191526020526106a7600160406000200154611427565b6115fb565b005b346101505760003660031901126101505760206040517f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68152f35b346101505760003660031901126101505760405160408101908082106001600160401b038311176104a2576107399160405260058152640352e302e360dc1b60208201526040519182918261126e565b0390f35b34610150576040366003190112610150576107636107596112b7565b60243590336116b8565b602060405160018152f35b3461015057600036600319011261015057602060405160008152f35b34610150576040366003190112610150576107a36112b7565b6024356107ae6113ad565b6001600160a01b038216908115610856578160005260008051602061184d83398151915280602052604060002054938285106108255750816000805160206118cd83398151915292600095602093868852845203604086205560008051602061186d833981519152818154039055604051908152a3005b60405163391434e360e21b81526001600160a01b039190911660048201526024810185905260448101839052606490fd5b604051634b637e8f60e11b815260006004820152602490fd5b34610150576000366003190112610150576040516000907f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054906108b38261167e565b90818452600192838116908160001461092c57506001146108eb575b610739846108df818803826112e3565b6040519182918261126e565b90935060005260209283600020916000925b8284106109195750505081610739936108df92820101936108cf565b80548585018701529285019281016108fd565b61073996506108df9450602092508593915060ff191682840152151560051b820101936108cf565b346101505760403660031901126101505761096d6112cd565b6004356000526000805160206118ed83398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b34610150576020366003190112610150576001600160a01b036109cf6112b7565b1660005260008051602061184d8339815191526020526020604060002054604051908152f35b34610150576000366003190112610150577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610a4e5760206040516000805160206118ad8339815191528152f35b60405163703e46dd60e11b8152600490fd5b604036600319011261015057610a746112b7565b60249081356001600160401b038111610150573660238201121561015057610aa5903690848160040135910161131f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115610df0575b50610a4e573360009081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a8602090815260409091205490919060008051602061188d8339815191529060ff1615610dd357506040516301ffc9a760e01b8082526336372b0760e01b600483015291851694919083818881895afa908115610d7c57600091610db6575b5015610d8857604051908152637965db0b60e01b600482015282818781885afa908115610d7c57600091610d4f575b5015610d1957604051847f7961c8f9895a011e1bdea60033539eb2f075513509777f3f37b4c6ec745f45fd600080a26352d1902d60e01b81528281600481885afa60009181610cea575b50610bfb57604051634c9c8ce360e01b8152600481018690528690fd5b8490866000805160206118ad83398151915291828103610cd55750833b15610cbf575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2835115610ca5575060008084846106ac96519101845af4903d15610c9c573d610c7f81611304565b90610c8d60405192836112e3565b8152600081943d92013e611762565b60609250611762565b9250505034610cb057005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508381813d8311610d12575b610d0281836112e3565b8101031261015057519087610bde565b503d610cf8565b6040516301a1fdbb60e41b815260048101839052600e818701526d125058d8d95cdcd0dbdb9d1c9bdb60921b6044820152606490fd5b610d6f9150833d8511610d75575b610d6781836112e3565b8101906117f4565b86610b94565b503d610d5d565b6040513d6000823e3d90fd5b6040516301a1fdbb60e41b8152600481018490526006818801526504945524332360d41b6044820152606490fd5b610dcd9150843d8611610d7557610d6781836112e3565b87610b65565b856044916040519163e2517d3f60e01b8352336004840152820152fd5b9050816000805160206118ad8339815191525416141585610adb565b3461015057604036600319011261015057610e256112b7565b60243590610e316113ad565b6001600160a01b0316908115610eb15760008051602061186d833981519152805490828201809211610e9b576000926000805160206118cd833981519152926020925584845260008051602061184d833981519152825260408420818154019055604051908152a3005b634e487b7160e01b600052601160045260246000fd5b60405163ec442f0560e01b815260006004820152602490fd5b3461015057604036600319011261015057610ee36112cd565b336001600160a01b03821603610eff576106ac906004356115fb565b60405163334bd91960e11b8152600490fd5b3461015057600036600319011261015057602060ff60005416604051908152f35b34610150576040366003190112610150576106ac600435610f516112cd565b90806000526000805160206118ed833981519152602052610f79600160406000200154611427565b611586565b34610150576020366003190112610150576004356000526000805160206118ed8339815191526020526020600160406000200154604051908152f35b3461015057606036600319011261015057610fd36112b7565b610fdb6112cd565b60443590610fe883611374565b3360005260205260406000205492600019840361100a575b61076393506116b8565b828410611079576001600160a01b0381161561106057331561104757826107639461103483611374565b3360005260205203604060002055611000565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b604051637dc7a0d960e11b81523360048201526024810185905260448101849052606490fd5b3461015057600036600319011261015057602060008051602061186d83398151915254604051908152f35b34610150576040366003190112610150576110e36112b7565b602435903315611060576001600160a01b03169081156110475761110633611374565b82600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346101505760003660031901126101505760405160009060008051602061182d83398151915280549061117d8261167e565b90818452600192838116908160001461092c57506001146111a857610739846108df818803826112e3565b90935060005260209283600020916000925b8284106111d65750505081610739936108df92820101936108cf565b80548585018701529285019281016111ba565b34610150576020366003190112610150576004359063ffffffff60e01b8216809203610150576020916336372b0760e01b811490811561125d575b8115611232575b5015158152f35b637965db0b60e01b81149150811561124c575b508361122b565b6301ffc9a760e01b14905083611245565b637965db0b60e01b81149150611224565b6020808252825181830181905290939260005b8281106112a357505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611281565b600435906001600160a01b038216820361015057565b602435906001600160a01b038216820361015057565b90601f801991011681019081106001600160401b038211176104a257604052565b6001600160401b0381116104a257601f01601f191660200190565b92919261132b82611304565b9161133960405193846112e3565b829481845281830111610150578281602093846000960137010152565b9080601f83011215610150578160206113719335910161131f565b90565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b3360009081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d460205260409020547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a69060ff16156114095750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b806000526000805160206118ed83398151915260205260406000203360005260205260ff60406000205416156114095750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120549091906000805160206118ed8339815191529060ff166114e3578280526020526040822081835260205260408220600160ff19825416179055339160008051602061180d8339815191528180a4600190565b505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a8602052604081205490919060008051602061188d833981519152906000805160206118ed8339815191529060ff16611580578184526020526040832082845260205260408320600160ff1982541617905560008051602061180d833981519152339380a4600190565b50505090565b906000918083526000805160206118ed83398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014611580578184526020526040832082845260205260408320600160ff1982541617905560008051602061180d833981519152339380a4600190565b906000918083526000805160206118ed83398151915280602052604084209260018060a01b03169283855260205260ff60408520541660001461158057818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b90600182811c921680156116ae575b602083101461169857565b634e487b7160e01b600052602260045260246000fd5b91607f169161168d565b916001600160a01b038084169283156108565716928315610eb15760009083825260008051602061184d8339815191528060205260408320549184831061172f575082846000805160206118cd833981519152959360409388602097528652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b0391909116600482015260248101929092525060448101839052606490fd5b90611789575080511561177757805190602001fd5b604051630a12f52160e11b8152600490fd5b815115806117bc575b61179a575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15611792565b60ff60008051602061190d8339815191525460401c16156117e257565b604051631afcd79f60e31b8152600490fd5b9081602091031261015057518015158103610150579056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212200c3af5c8272c01dcbca6e9ab0fd770e8a66ff5c36e0740614b4f8a946e2c51ce64736f6c6343000814003300000000000000000000000056e9b453ea1966a71002c52c33d22d155b726b0f0000000000000000000000008317dd90dacf0fa7926e1546dd3f9b03c26fc836000000000000000000000000474bd40cfddafb2cff7954cc50c10c6dd7ec47f10000000000000000000000000520a29f93bedd7f360850e205bb070d3de960330000000000000000000000007ea853a346d0ba5c9a1730d3a6cf7cfd789e42af