60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b62000fdf1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b612bad806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063a457c2d7116100a2578063d539139311610071578063d539139314610484578063d547741f146104ab578063dd62ed3e146104be578063f1127ed8146104f7576101f0565b8063a457c2d714610438578063a9059cbb1461044b578063c3cda5201461045e578063d505accf14610471576101f0565b806391d14854116100de57806391d14854146103dc57806395d89b41146104155780639ab24eb01461041d578063a217fddf14610430576101f0565b806370a08231146103855780637ecebe00146103ae5780638129fc1c146103c15780638e539e8c146103c9576101f0565b80633644e5151161018757806340c10f191161015657806340c10f19146102f2578063587cde1e146103055780635c19a95c1461034a5780636fcfff451461035d576101f0565b80633644e515146102b157806336568abe146102b957806339509351146102cc5780633a46b1a8146102df576101f0565b806323b872dd116101c357806323b872dd14610257578063248a9ca31461026a5780632f2ff15d1461028d578063313ce567146102a2576101f0565b806301ffc9a7146101f557806306fdde031461021d578063095ea7b31461023257806318160ddd14610245575b600080fd5b610208610203366004612879565b610534565b60405190151581526020015b60405180910390f35b6102256105cf565b604051610214919061293a565b610208610240366004612781565b610661565b6067545b604051908152602001610214565b6102086102653660046126dd565b610679565b61024961027836600461283f565b60009081526097602052604090206001015490565b6102a061029b366004612857565b61069f565b005b60405160128152602001610214565b6102496106c9565b6102a06102c7366004612857565b6106d8565b6102086102da366004612781565b610769565b6102496102ed366004612781565b6107a8565b6102a0610300366004612781565b61081c565b610332610313366004612691565b6001600160a01b03908116600090815261013060205260409020541690565b6040516001600160a01b039091168152602001610214565b6102a0610358366004612691565b610850565b61037061036b366004612691565b61085d565b60405163ffffffff9091168152602001610214565b610249610393366004612691565b6001600160a01b031660009081526065602052604090205490565b6102496103bc366004612691565b610880565b6102a061089e565b6102496103d736600461283f565b610ac7565b6102086103ea366004612857565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610225610b24565b61024961042b366004612691565b610b33565b610249600081565b610208610446366004612781565b610bca565b610208610459366004612781565b610c7f565b6102a061046c3660046127aa565b610c8d565b6102a061047f366004612718565b610dc3565b6102497f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a06104b9366004612857565b610f27565b6102496104cc3660046126ab565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b61050a610505366004612801565b610f4c565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610214565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105c757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b90505b919050565b6060606880546105de90612b2c565b80601f016020809104026020016040519081016040528092919081815260200182805461060a90612b2c565b80156106575780601f1061062c57610100808354040283529160200191610657565b820191906000526020600020905b81548152906001019060200180831161063a57829003601f168201915b5050505050905090565b60003361066f818585610fee565b5060019392505050565b600033610687858285611146565b6106928585856111d8565b60019150505b9392505050565b6000828152609760205260409020600101546106ba816113f5565b6106c483836113ff565b505050565b60006106d36114a1565b905090565b6001600160a01b038116331461075b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610765828261151c565b5050565b3360008181526066602090815260408083206001600160a01b038716845290915281205490919061066f90829086906107a390879061296d565b610fee565b60004382106107f95760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610752565b6001600160a01b038316600090815261013160205260409020610698908361159f565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610846816113f5565b6106c48383611678565b61085a3382611682565b50565b6001600160a01b038116600090815261013160205260408120546105c790611715565b6001600160a01b038116600090815260fd60205260408120546105c7565b600054610100900460ff16158080156108be5750600054600160ff909116105b806108d85750303b1580156108d8575060005460ff166001145b61094a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610752565b6000805460ff19166001179055801561096d576000805461ff0019166101001790555b6109e16040518060400160405280600e81526020017f59616e6461546f6b656e546573740000000000000000000000000000000000008152506040518060400160405280600481526020017f594e445400000000000000000000000000000000000000000000000000000000815250611795565b6109e961180a565b610a276040518060400160405280600e81526020017f59616e6461546f6b656e54657374000000000000000000000000000000000000815250611877565b610a4a33610a376012600a6129e2565b610a4590633b9aca00612ab3565b611678565b610a556000336113ff565b610a7f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336113ff565b801561085a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000438210610b185760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610752565b6105c76101328361159f565b6060606980546105de90612b2c565b6001600160a01b038116600090815261013160205260408120548015610bb7576001600160a01b038316600090815261013160205260409020610b77600183612ad2565b81548110610b9557634e487b7160e01b600052603260045260246000fd5b60009182526020909120015464010000000090046001600160e01b0316610bba565b60005b6001600160e01b03169392505050565b3360008181526066602090815260408083206001600160a01b038716845290915281205490919083811015610c675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610752565b610c748286868403610fee565b506001949350505050565b60003361066f8185856111d8565b83421115610cdd5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610752565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610d5790610d4f9060a00160405160208183030381529060405280519060200120611921565b85858561198a565b9050610d62816119b2565b8614610db05760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610752565b610dba8188611682565b50505050505050565b83421115610e135760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610752565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e428c6119b2565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610e9d82611921565b90506000610ead8287878761198a565b9050896001600160a01b0316816001600160a01b031614610f105760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610752565b610f1b8a8a8a610fee565b50505050505050505050565b600082815260976020526040902060010154610f42816113f5565b6106c4838361151c565b60408051808201909152600080825260208201526001600160a01b038316600090815261013160205260409020805463ffffffff8416908110610f9f57634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b03163b151590565b6001600160a01b0383166110695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610752565b6001600160a01b0382166110e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610752565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526066602090815260408083209386168352929052205460001981146111d257818110156111c55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610752565b6111d28484848403610fee565b50505050565b6001600160a01b0383166112545760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610752565b6001600160a01b0382166112d05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610752565b6001600160a01b0383166000908152606560205260409020548181101561135f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610752565b6001600160a01b0380851660009081526065602052604080822085850390559185168152908120805484929061139690849061296d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113e291815260200190565b60405180910390a36111d28484846119da565b61085a81336119e5565b60008281526097602090815260408083206001600160a01b038516845290915290205460ff166107655760008281526097602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561145d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006106d37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6114d060c95490565b60ca546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b60008281526097602090815260408083206001600160a01b038516845290915290205460ff16156107655760008281526097602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b8154600090815b818110156116115760006115ba8284611a65565b9050848682815481106115dd57634e487b7160e01b600052603260045260246000fd5b60009182526020909120015463ffffffff1611156115fd5780925061160b565b61160881600161296d565b91505b506115a6565b81156116635784611623600184612ad2565b8154811061164157634e487b7160e01b600052603260045260246000fd5b60009182526020909120015464010000000090046001600160e01b0316611666565b60005b6001600160e01b031695945050505050565b6107658282611a80565b6001600160a01b0382811660008181526101306020818152604080842080546065845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46111d2828483611b18565b600063ffffffff8211156117915760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610752565b5090565b600054610100900460ff166118005760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610752565b6107658282611c57565b600054610100900460ff166118755760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610752565b565b600054610100900460ff166118e25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610752565b61085a816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611ce9565b60006105c761192e6114a1565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061199b87878787611d6e565b915091506119a881611e5b565b5095945050505050565b6001600160a01b038116600090815260fd602052604090208054600181018255905b50919050565b6106c483838361205e565b60008281526097602090815260408083206001600160a01b038516845290915290205460ff1661076557611a23816001600160a01b03166014612091565b611a2e836020612091565b604051602001611a3f9291906128b9565b60408051601f198184030181529082905262461bcd60e51b82526107529160040161293a565b6000611a746002848418612985565b6106989084841661296d565b611a8a82826122b8565b6067546001600160e01b031015611b095760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610752565b6111d261013261239f836123ab565b816001600160a01b0316836001600160a01b031614158015611b3a5750600081115b156106c4576001600160a01b03831615611bc9576001600160a01b0383166000908152610131602052604081208190611b769061254e856123ab565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611bbe929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106c4576001600160a01b0382166000908152610131602052604081208190611c009061239f856123ab565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611c48929190918252602082015260400190565b60405180910390a25050505050565b600054610100900460ff16611cc25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610752565b8151611cd59060689060208501906125d9565b5080516106c49060699060208401906125d9565b600054610100900460ff16611d545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610752565b81516020928301208151919092012060c99190915560ca55565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611da55750600090506003611e52565b8460ff16601b14158015611dbd57508460ff16601c14155b15611dce5750600090506004611e52565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e22573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e4b57600060019250925050611e52565b9150600090505b94509492505050565b6000816004811115611e7d57634e487b7160e01b600052602160045260246000fd5b1415611e885761085a565b6001816004811115611eaa57634e487b7160e01b600052602160045260246000fd5b1415611ef85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610752565b6002816004811115611f1a57634e487b7160e01b600052602160045260246000fd5b1415611f685760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610752565b6003816004811115611f8a57634e487b7160e01b600052602160045260246000fd5b1415611fe35760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610752565b600481600481111561200557634e487b7160e01b600052602160045260246000fd5b141561085a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610752565b6001600160a01b03838116600090815261013060205260408082205485841683529120546106c492918216911683611b18565b606060006120a0836002612ab3565b6120ab90600261296d565b67ffffffffffffffff8111156120d157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120fb576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061214057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061219957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006121bd846002612ab3565b6121c890600161296d565b90505b6001811115612269577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061221757634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061223b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361226281612b15565b90506121cb565b5083156106985760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610752565b6001600160a01b03821661230e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610752565b8060676000828254612320919061296d565b90915550506001600160a01b0382166000908152606560205260408120805483929061234d90849061296d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610765600083836119da565b6000610698828461296d565b82546000908190801561240457856123c4600183612ad2565b815481106123e257634e487b7160e01b600052603260045260246000fd5b60009182526020909120015464010000000090046001600160e01b0316612407565b60005b6001600160e01b0316925061242083858763ffffffff16565b915060008111801561246c5750438661243a600184612ad2565b8154811061245857634e487b7160e01b600052603260045260246000fd5b60009182526020909120015463ffffffff16145b156124da5761247a8261255a565b86612486600184612ad2565b815481106124a457634e487b7160e01b600052603260045260246000fd5b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550612545565b8560405180604001604052806124ef43611715565b63ffffffff1681526020016125038561255a565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b60006106988284612ad2565b60006001600160e01b038211156117915760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401610752565b8280546125e590612b2c565b90600052602060002090601f016020900481019282612607576000855561264d565b82601f1061262057805160ff191683800117855561264d565b8280016001018555821561264d579182015b8281111561264d578251825591602001919060010190612632565b506117919291505b808211156117915760008155600101612655565b80356001600160a01b03811681146105ca57600080fd5b803560ff811681146105ca57600080fd5b6000602082840312156126a2578081fd5b61069882612669565b600080604083850312156126bd578081fd5b6126c683612669565b91506126d460208401612669565b90509250929050565b6000806000606084860312156126f1578081fd5b6126fa84612669565b925061270860208501612669565b9150604084013590509250925092565b600080600080600080600060e0888a031215612732578283fd5b61273b88612669565b965061274960208901612669565b9550604088013594506060880135935061276560808901612680565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612793578182fd5b61279c83612669565b946020939093013593505050565b60008060008060008060c087890312156127c2578182fd5b6127cb87612669565b955060208701359450604087013593506127e760608801612680565b92506080870135915060a087013590509295509295509295565b60008060408385031215612813578182fd5b61281c83612669565b9150602083013563ffffffff81168114612834578182fd5b809150509250929050565b600060208284031215612850578081fd5b5035919050565b60008060408385031215612869578182fd5b823591506126d460208401612669565b60006020828403121561288a578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610698578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516128f1816017850160208801612ae9565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161292e816028840160208801612ae9565b01602801949350505050565b6000602082528251806020840152612959816040850160208701612ae9565b601f01601f19169190910160400192915050565b6000821982111561298057612980612b61565b500190565b6000826129a057634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116129b75750611e52565b8187048211156129c9576129c9612b61565b808616156129d657918102915b9490941c9380026129a8565b600061069860001960ff8516846000826129fe57506001610698565b81612a0b57506000610698565b8160018114612a215760028114612a2b57612a58565b6001915050610698565b60ff841115612a3c57612a3c612b61565b6001841b915084821115612a5257612a52612b61565b50610698565b5060208310610133831016604e8410600b8410161715612a8b575081810a83811115612a8657612a86612b61565b610698565b612a9884848460016129a5565b808604821115612aaa57612aaa612b61565b02949350505050565b6000816000190483118215151615612acd57612acd612b61565b500290565b600082821015612ae457612ae4612b61565b500390565b60005b83811015612b04578181015183820152602001612aec565b838111156111d25750506000910152565b600081612b2457612b24612b61565b506000190190565b600181811c90821680612b4057607f821691505b602082108114156119d457634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fdfea2646970667358221220cda079fa5c6fe1b276e6e98333793fc21f9ed5948f4e2a1f4bdf7ef574c6340064736f6c63430008030033