31 lines
8.9 KiB
Python
Executable File
31 lines
8.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from __future__ import print_function
|
|
from codecs import open
|
|
import os, ssl
|
|
if (not os.environ.get('PYTHONHTTPSVERIFY', '') and getattr(ssl, '_create_unverified_context', None)):
|
|
ssl._create_default_https_context = ssl._create_unverified_context
|
|
|
|
"""
|
|
CS 188 Local Submission Autograder
|
|
Written by the CS 188 Staff
|
|
|
|
==============================================================================
|
|
_____ _ _
|
|
/ ____| | | |
|
|
| (___ | |_ ___ _ __ | |
|
|
\___ \| __/ _ \| '_ \| |
|
|
____) | || (_) | |_) |_|
|
|
|_____/ \__\___/| .__/(_)
|
|
| |
|
|
|_|
|
|
|
|
Modifying or tampering with this file is a violation of course policy.
|
|
If you're having trouble running the autograder, please contact the staff.
|
|
==============================================================================
|
|
"""
|
|
import bz2, base64
|
|
exec(bz2.decompress(base64.b64decode('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')))
|
|
|